-
[10주차 - Day2] CNN Models교육/프로그래머스 인공지능 데브코스 2021. 7. 17. 18:40728x90
Deep Learning: 신경망의 기초 - 심층학습 최적화 I
1. 목적함수 : 교차 엔트로피와 로그우도
1.1. 평균제곱 오차를 다시 생각하기
평균제곱 오차(MSE) 목적함수 : (실제값-예측값)을 L2 Norm을 이용해서 정량화
오차가 클수록 e값이 크므로 벌점(정량적 성능)으로 활용됨
->허점이 존재!신경망 학습과정에서 학습은 오류를 줄이는 방향으로 가중치와 편향을 교정하기 때문에 큰 교정이 필요함에도 작은 경사도로 작게 갱신
왜 오류가 큰 데도 작은 경사도가 구해지는가??(=위에서 말한 허점)
로지스틱 시그모이드 함수를 사용하는 경우 미분하면 경사도가 작아지기 때문!
암만 큰 값(오차)가 들어오더라도 0에 가까운 값을 출력해주기 때문
->1)로지스틱 시그모이드 함수를 ReLU함수나 2)MSE를 교차 엔트로피로 바꾸자!
1.2. 교차 엔트로피(cross entropy)
교차 엔트로피를 사용하면 잘못된 학습으로 오분류된 손실은 크게 잘된 학습으로 제대로 분류된 손실은 0으로
1.3. 소프트맥스 활성함수와 로그우도 목적함수
로지스틱 시그모이드는 각각의 확률값을 0~1로 매핑시켜주는 것->전부 합쳤을 때 1이 아님, 확률분포X
max는 각각의 확률 중 가장 큰 값을 1로 나머지는 0으로 변환->확률분포긴 하나 너무 극단적
각각의 확률값에 e를 취해주고 전체/각각의 확률한 것->전부 더하면 1이므로 확률분포를 이루면서 극단적이지 않음
모든 출력 노드값을 사용하는 MSE나 교차 엔트로피와 달리 하나의 노드만 적용
- 소프트맥스는 최댓값이 아닌 값을 억제하여 0에 가깝게 만든다는 의도
- 신경망에 의한 샘플의 정답에 해당하는 노드만 보는 건 로그우도
- ->둘을 결합하여 사용하는 경우가 많음
2. 성능 향상을 위한 요령
2.1. 데이터 전처리
규모(Scale)문제
ex)건강에 관련된 데이터 : 키(cm), 몸무게(kg), 혈압 -> 3가지 속성을 보기로 했다고 가정
1.885m와 1.525m는 33cm나 차이가 나지만 m단위를 썼기 때문에 0.33밖에 차이 안 남
65.5kg과 45.0kg은 20.5라는 차이
->첫번째와 두번째 특징은 양수이고 대략 100배의 규모 차이->첫번째 특징이 두번째 특징에 비해 느리게 학습됨
모든 특징이 양수인 경우의 문제
-δz가 경사도(δ는 output, z는 input)
모든 특징이 양수인 경우라고 가정했으므로 z는 항상 +이므로 경사도는 δ(output)이 영향을 줄 것
경사도가 +인 가중치는 모두 증가, -인 가중치는 모두 감소->가중치가 뭉치로 증가, 감소하면 최저점을 찾아가는 경로가 갈팡질팡하여 느린 수렴
=>특징들의 규모를 비슷하게 맞춰주고 음수와 양수를 모두 포괄할 수 있는 범위로 바꿔줘야함=정규화(Normalization)
1. 정규 분포를 활용하여 변환(z-transform) : 일반적
- 평균이 0이 되도록 변환
- 표준 편차가 1이 되도록 변환
2. 최대 최소 변환을 적용
0~1 사이의 규모로 변환
명목 변수(norminal value)을 원핫(one-hot)코드로 변환
명목 변수 : 객체간 서로 구분하기 위한 변수 ex)남/여, 태양인/태음인/소양인/소음인,,,
명목 변수는 거리 개념이 없고 컴퓨터나 신경망은 정량화된 값만 받을 수 있기 때문에 원핫코드로 변환
2.2. 가중치 초기화
대칭적 가중치 문제
가중치가 대칭적이면 경사도가 계속 똑같은 값으로 갱신됨
노드가 같은 일을 하는 중복이 발생 신경망을 여러 개써서 서로 다른 관점으로 바라보려는 게 소용이 없어짐
=>난수로 초기화함으로써 대칭 파괴(symmetry break)
가우시안(Gaussian)또는 균열(uniform)분포에서 난수 추출
두 분포는 성능 차이는 거의 없음
편향은 보통 0으로 초기화
- 가중치 초기화가 너무 작으면 : 모든 활성 값, 경사도가 0이 되므로 학습이 안 됨
- 가중치 초기화가 너무 크면 : 활성값은 포화, 경사도는 0이 되므로 학습이 안 됨
- 가중치 초기화가 적당하면 : 모든 층에서 활성값의 분포가 좋으므로 적절한 학습 수행
2.3. 탄력(가속도, 관성, momentum)
초기화를 다 했으면 탐색을 해야함
경사도의 잡음 현상
기계 학습은 훈련집합을 이용하여 매개변수의 경사도를 추정하므로 잡음 가능성이 높음
->탄력은 경사도에 부드러움을 가하여 잡음 효과를 줄임
탄력?(=관성, 가속도, momentum) 과거에 이동했던 방식을 기억하면서 기존 방향으로 일정 이상 추가 이동
->지역 최저점, 안장점에 빠지는 문제 해소해서 수렴 속도 향상, 지나침(overshooting) 현상이 누그러짐
관성을 적용한 가중치 갱신 수식
네스테로프 가속 경사도(nesterov accelerated gradient) 관성
현재 v값으로 다음 이동할 곳(~θ)을 예견한 후, 예견한 곳의 경사도를 사용
->값이 수렴이 더 잘 돼서 멈춤이 용이
2.4. 적응적 학습률
학습률(learning rate) ρ의 중요성
너무 크면 지나침(overshooting)에 따른 진자 현상, 너무 작으면 수렴이 느림
적응적 학습률(adaptive learning rates/per-parameter learning rates)
매개변수마다 자신의 상황에 따라 학습률을 조절해 사용
ex)학습률 담금질(sitmulated annealing, SA) : 이전 경사도와 현재 경사도의 부호가 같은 매개변수(과거 값과 현재 값이 동일한 방향을 바라보고있음->수렴하고 있는 것!)는 값을 키우고 다른 매개변수는 값을 줄이는 전략
AdaGrad(adaptive gradient)
RMSProp
AdaGrad의 단점 : r=r+g⊙g ->과거의 gradient와 현재의 gradient가 동일한 비중을 가짐, 현재 gradient가 더 중요한데 과거의 gradient가 방해가 될 수 있음
=>RMSProp은 가중 이동 평균(weight routing average)기법 적용
r=αr+(1-α)g⊙g -> α가 작을수록 최근 것에 비중을 둠
Adam(adaptive moment)
RMSProp+관성(momentum)
'교육 > 프로그래머스 인공지능 데브코스' 카테고리의 다른 글
[10주차 - Day4] RNN(Recurrent Neural Network) (0) 2021.08.01 [10주차 - Day3] Deep Learning 최적화 (0) 2021.07.28 [10주차 - Day1] Deep Learning 기초 (0) 2021.07.07 [9주차 - Day4] Deep Learning 기초 (0) 2021.07.03 [9주차 - Day3] Deep Learning 기초 (0) 2021.07.01