딥러닝 네트워크에서 노드에 입력된 값들을 비선형 함수에 통과시킨 후 다음 레이어로 전달하는데, 이 때 사용하는 함수를 활성화 함수(Activation Function)라고 한다. 선형 함수가 아니라 비선형 함수를 사용하는 이유는 딥러닝 모델의 레이어 층을 깊게 가져갈 수 있기 때문이다.
5*5냐 5*5*3이냐 ?
-> 5*5*3이 맞다. 3이 생략되어있다.
input volume 32*32*3
10 5*5,
pad2 -.케라스 로 표현하면
tf.keras.layers.conv2D(10,5, padding='same', input_volume >0)
10 ==필터갯수, 5==필터크기
필터의 차원은 입력 값에 따라 자동으로 맞춰준다.
함수를 컴퓨터셔널 그래프로 표현하는법을 배웠다.
리니어 레이어를 비 선형 연산자들을 끼워넣었다.
CNN 컨브필터가 이미지를 슬라이싱한다. 필터는 대개 여러개이다
액티베이션 맵은 필터 갯수만큼있다.
그라디언트 계산을 위해 백프로파게이션을 한다.
트레이닝 뉴럴 내트웍크
액티베이션 펑션 : 활성화 함수
시그모이드 함수
데이터입력이 드렁오면 가중치와 곱한다. 예를들어 fc나 cnn이 있다.
시그모이드는 입력을 받아서 0~1사이의 값으로 반환에 준다.
입력값이 크면 1에 가깝고 작으면 0에 가깝다0근처를 보면 선형같다.
시그모이드는 히스토리컬하다. 역사적으로 많이 썼다. 지금은 잘 안쓴다.
시그모이드 문제점
새투럴레이션이 그라디언트를 없앤다.
백프로파에서 그래디언트는 어떻게 되는가.
x-10이면 출력은 0이 된다. 그레디언트가 죽는다
x가 0이면 잘 작동된다.
x가 10이면 flat해서 그레디언트가 죽는다.
입력이 항상 양수일떄 : 가중치랑 곱해지고 활성함수를 통과한다
우선 활성함수를 구할 것이다. 결국 W는 모두 음수 또는 모두 양수이다.
이런 그라디언트 구하는 방식은 매우 비효율적이다.
입력이 양수 음수 섞여있으면 문제는 발생하지 않는다.
exp지수함수르 써서 계산속도가 조금 느리긴 하지만 그렇게 크게 문제되지는 않는다.
제로센터가 아니면 문제가 되는게 파라미터의 그레디언트는 입력값에 영향을 받는데 만약 입력값이 모두 양수라면 파라미터 부호는 모두 같게 된다. 지그재그로 간다.
활성함수 데이터전처리
체인룰로 항상 양수가 나올려면 음수*음수 or 양수*양수여야 한다.
시그모이드는 항상 양수 값을 출력하므로 입력의 가중치 합보다 출력의 가중치 합이 더 커질 가능성이 높다. 이를 편향 이동이라 하며, 이로인해 매 층을 지날 때 분산이 커지는데 결국 가장 높은 레이어에서는 활성화 함수의 출력이 0이나 1로 수렴해서 그레디언트 소실문제가 발생한다.
blog.naver.com/arar2017/221762204242
기울기 소실 해결책(2) - 활성화 함수 렐루(ReLU)
해결책2 : 문제는 활성화 함수 - ReLU 그 다음으로는 힌튼이 네번째로 제시한 이유인 활성화 함수에 대...
blog.naver.com
렐루
입력이 음수면 0값 양수면 갑 그대로
양의 값에서는 saturation 되지 않는다.
맥스연산이라 지수연산보다 빠르다.
6배정도 빠르다.
뉴런 실험을 통한 결과로도 뉴런과 비슷하다.
렐루는 제로센터가 아니다.
또 문제점은 음수에서는 문제가 있다.
x =-10, 0이면 기울기 0이고
x=10일 땐 리니어하다.
하이퍼블릭 탄젠트
이런상황은 트레이닝 데이터에서 평면의 절반만
렐루가 데이터클라우드에서 떨어져있을경우 죽는다.
초기화를 잘못하면 이런 일이 생긴다.
이러면 어떤 입력에도 백프로파게이션이 안된다.
업데이트를 지나치게 해도 메인폴드를 지나쳐 학습이 안되고 죽는 경우도 있다.
10%~20%확률로 데드렐루가 된다.
질문 : 데이터클라우드는 그냥 트레이닝 데이터이다.
렐루가 죽은지안죽은지 아는방법
렐루 입력값 w1*x1+w2*x2이런식으로 생겼다. 초평면 가체가 데이터와 떨어질 경우가 있다. 이럴경우 죽는 것이다.
렐루를 초기화할때 바이어스를 추가하는 경우도 있다.
하지만 이게 도움이 된다는 사람도있고 의견이 분분하다.
일반적으론 제로바이어스 쓴다.
리키렐루
음수일때 0이 아니다.
기울기를 살짝 준것이다.
데드렐루도 없다.
피 렐루
음수 에서도 기울기가 있고 알파를 정해놓은게 아니고
백프로파게이션으로 알파를찾는다.
이렐루는 음수에서 또다시 수렴한다.
덱티베이션에서 강점
렐루와 리키렐루 합친 느낌이다.
확실한건 세심하게 좋은 장점만 가지게 디자인했다.
GELU 갤루
입력 음수에서 G(가우시안) 이 들어간다.
자연어에서 강세라고 한다.
푸리에 변환을 취했을 때 함수 형태가 유지되는게 가우시안 이라고 한다.
맥스아웃 뉴론
입력 형식을 정해놓지 않는다.,
내적 내적 +b 값을 사용한다.
두 함수중 최댓값.
두개의 선형 함수를 취한다.
맥스아웃또한 선형이여서 수렴하지않고 죽지않는다.
문제는 파라미터수가 2배여서 느릴 수있다.
렐루를 사용하려면 러닝레이트를 신중하게 결정해야한다.
정리 : 렐루를 쓸때는 batch_size를 크게 해서 러닝레이트를 작게하는게 중요한 것을 깨달았다.
데이터 전처리
제로민 하고 노멀라이즈 하는것
제로센터드 하는방법은 전체값에서 평균값을 빼주면 된다.
노멀라이즈는 0~1사이로 값을 줄이는것이다.
제로센터링
모든뉴런이 파시티브해진다.
노멀라이징 해주는이유
일반적으로 이미지는 노멀라이징 은 안하고 제로 센터링만 한다.
노멀라이징하면 데이터 차원수가 줄어들기 때문이다.
머신러닝엔 피씨에이도 있고 여러 전처리가 있다.
전처리중에 pca는 공분산행렬로만드는것인데 이는 대각행렬로 만들수있다.
이렇게 PCA를 거치면 데이터가 쭉 늘어지는데 이를 동그랗게 모아놓은것이 whitening 이라고 한다.
트레인데이터 테스트데이터 모두 전처리를 해야한다.
요약하면 이미지는 제로민 전처리 한다.
입력이미지의 사이즈를 맞춰주는데 이미지값에서 평균값을 빼는 것이다.
채널마다 평균값을 구하는 경우도 있다.
채널은 RGB 이다.
평균은 어떻게 구하는지 : 데이터 전부를 가지고
미니배치로 학습하는경우도 전체 데이터의 평균을 이용한다.
가중치 초기화
시그모이드에게 제로민이 필요하다.
처음에는 제로민 전처리가 해결에주나 나중에갈수록 해결이 안된다.
모든 가중치 0이면 어떻게 되나 파라미터가0이면?
모든 뉴런이 같은 일을 한다.같은 연산을 수행한다.
출력도 같고 그레디언트도 같다
모든 가중치가 같다.
우리는 뉴런이 모두 다르게 생기길 바란다.
그레디언트는 가중치뿐만아니라 로스에도 영향을 받는다.
네트워크 전체를보면 뉴런들은 동일한 가중치로 묶여있다.
첫번째 방법 : 임의의 작은값으로 초기화
작은 모델에선 이 방법이 나쁘지 않은데.
깊은 네트워크로 큰 모델을 학습한다 했을 때, 레이어별 액티베이션 수치를 통계화 해보면 레이어 평균과 표준편차를보면
평균은 거의 0 근처에 있고 x와 W를 내적한 값에 탄젠트를 취한다. 탄젠트가 제로 센터드라 평균이 0인것이 당연하다.
처음엔 정규분포를 따르며 이쁘게 나왔는데 W를 곱하면 곱할수록 너무 작은 값들이 나와서 값이 너무 작아져서 결국 0이 나온다.
백프로파게이션 과정에서도 점점0으로 수렴하게 된다.
업스트림은 위에서 아래로 흐르는 느낌으로 이해했다.
가중치의 편차를 0.01이 아니라 1로 하면?
큰 가중치를 곱하고 탄젠트 취하면 수렴한다.
출력이 항상 -1 이거나 1이다.
그라디언트가 0이되고 수렴한다.
사비어 이니셜라제이션
입출력의 분산을 맞춰준다.
입력수가 작으면 더 작은 값으로 나누고 크면 큰값으로 나눈다.
입력의 수가 많은경우 더 작은 가중치가 필요하다.
하지만 문제는 렐루를 쓰면 작동이 안된다.
입력데이터와 입력데이터의 출력을 입력데이터 제곱으로 나눠주었다.
렐루는 출력의 절반을 죽인다.
렐루에서는 값이 너무 작아진다고 한다.
분포가 또 줄어든다. 결국 비활성이 된다.
이문제를 해결하려면 2를 더 나눠준다.
입력이 반밖에 안들어가므로 additional을 반을 나눠주는 것이다.
지금은 점점 연구중이다.
배치 노말라이제이션
가우시안 범위로
배치 단위만큼의 액디베이션이 있을때
누구나 이 데이터를 유닛 가우시안으로 만둘수 있다.,
학습할때마다 유닛가우시안으로 바꿔준다.
뉴런을 평균과 분산을 통해 노멀라이제이션을 해준다.
평균과 분산을 상수로만 가지고있으면 언제든 백프로파게이션 할 수 있다.
배치당 N개를 가지고 있으면 D차원 이라고 한다.
배치내에 모두 계산해서 노멀라이제이션 한다.
깊BN은 스케일만 살짝 조정해줘서 계산 순서가 상관없다.
conv 같은 경우 평균과 분산을 하고
FC를 거칠때마다 노말라이제이션을 해주는 것을 볼 수 있다.
노말라이제이션 역할은 탄젠트의 리니어한 영역에만 있게 해준다.
감마 스케일링 베타 이동역할
데이터 원상복구 할려면 감마=분산 베타=평균 넣으면 된다.
입력이 있구 미니베치에서 평균계산 모든 미니베치마다 평균
폍ㄴ균분산으로 노멀라이즈
비엔은 그라티언트 원활
러닝레이트 크기 키울수 있다
비엔 레쿨러제이션 역할도 한다.
레이어 출력은 데이터 하나 뿐만 아니라 배치안에 존재하는 모든 데이터에 영향을 받는다.
배치내의 모든데이터가 한대 묶인다.
출력으로 나온 뉴런마다 BN을 해주는 것이다.
데이터에 연산이 잘 수행되도록 조금 스케일링하고 움직이는 것이다. 가우시안을 한다고 크게 문제가 없다.\
레이어의 입력에 평균을 빼고 표준편차로 나눠주면 유닛가우시안으로 맞춰주는 것이다. 레이어의 입력을 노멀라이즈 하는 것이다.
노멀라이즈란 데이터를 유닛 가우시안화 해주는 것이다.
BM = 배치 노멀라이제이션
필터를 통과하면 모양이 찌그러지는데 이 모양을 다시 잡아주는 역할
'모두의 연구소 AIFFEL 교육' 카테고리의 다른 글
모델 파라미터와 하이퍼 파라미터 (0) | 2021.02.04 |
---|---|
시그모이드 지그재그 (0) | 2021.02.01 |
pooling 이란 (0) | 2021.02.01 |
전체적인 model.fit() 과정 (0) | 2021.02.01 |
러닝 레이트와 배치사이즈 (0) | 2021.02.01 |