일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지
- AI
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
- 직장인인강
- 알버트
- R
- 패스트캠퍼스후기
- SKT
- 직장인자기계발
- albert
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online
- 패캠챌린지
- 패스트캠퍼스
- 한번에끝내는Java/Spring웹개발마스터초격차패키지
- Today
- Total
제주 탈출 일지
인공지능 이론(6주차) - 학습 관련 기술 1 본문
학습 관련 기술
1. 최적화 기법
2. 가중치 초기값
3. 배치 정규화
4. 오버피팅
5. 하이퍼파라미터 최적화
이번 포스팅에는 1번과 2번에 대해서 다룰 예정이다.
최적화 기법
학습은 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 것이다. 신경망이 학습할 수 있도록 해주는 지표는 손실함수이고, 이 손실함수의 결과값을 가장 작게 만드는 가중치 매개변수를 찾는 것이 학습의 목표라고 할 수 있다.
그렇다면 어떻게 해야 매개변수의 최적값을 빠르게 찾을 수 있을 것인가? 이 최적값을 빠르게 찾는 문제가 최적화 기법
의 이슈이다.
최적화 기법 - 확률적 경사 하강법
: 지난 포스팅에 언급했던 것처럼, "지금 서있는 장소에서 가장 크게 기울어진 방향으로 가자!" 는 방법
방법이 단순하여 구현이 쉬우나, 비등방성 함수(방향에 따라 기울기가 바뀌는)에서 탐색 경로가 비효율적이게 된다..
또한 기울기가 0인 점을 잘 탈출하지 못한다.(지역 최소값)
모멘텀(Momentum)
: 관성(Momentum), 기울기에 속도의 개념을 추가한다.
속도의 영향으로 가중치가 감소(혹은 증가)하던 방향으로 더 맣이 변화하게 됨. SGD보다 더 빠르게 최소값에 수렴
현재 기울기가 0인 안장점이라도 속도가 있어 계속 이동 가능하다.
AdaGrad
: 개별 매개변수에 적응적으로 학습률을 조정하며 학습을 진행한다.
#학습률 값이 작으면 학습 시간이 길어지고, 너무 크면 발산하여 학습이 제대로 이루어지지 않는다.
Adam
: 모멘텀과 AdaGrad를 융합한 방법
최근 자주 사용된다.
모든 문제에 항상 뛰어난 기법은 없다. 최근 기법중에는 Adam이 많이 사용
어느 최적화 기법을 이용해야 하는가?
: 모든 문제에 항상 뛰어난 기법은 없다. 풀어야 할 문제에 따라서 결정해야 한다.(하지만 SGD는 대체적으로 최근 기법들보다 좋지 못하다. 간단한 문제에서만 사용하는 것이 좋음)
다음 그림은 다양한 최적화 기법에 대한 정리된 설명이다. 출처는 그림에 표시되어 있다.
가중치 초기값
인공신경망으로 학습을 시키겠다면 신경망을 먼저 만들어야 한다. 입력과 출력 레이어는 문제에 따라 결정이 되고, 중간의 히든레이어는 개발자가 설계를 진행하게 된다. 그 후 모델을 만들고 나면 수집한 데이터를 통해 모델을 학습을 시키게 된다. "그렇다면 가중치 매개변수도 초기값을 가져야 하는데, 초기에는 값을 어떻게 셋팅할 것인가???"에 대한 이슈이다.
- 그냥 가중치 초기값을 프로그래밍 변수처럼 0으로 모두 초기화 하자!
: 초기화를 모두 0으로 할 경우, 오차역전파법에서 모든 가중치의 값이 동일한 값으로 똑같이 갱신되기 때문에 학습의 이미가 없어지게 된다.
가중치 감소
가중치 매개변수의 값이 작아지도록 학습하는 방법
가중치 값을 작게 하여 오버피팅이 일어나지 않게 하는 것이다.
(가중치가 클수록 오버피팅이 더 빈번하게 일어남.)
가중치 매개변수들이 점점 작아지도록 하기 위해서는 "이전 노드의 입력을 통해 다음 노드에 가중치를 전달하는 활성화 함수에 대해서 초기값을 어떻게 설정해야 하는가?"와 같은 말이라고 생각한다. (검증필요)
시그모이드 가중치 초기값
노드의 가중치들이 다양한 값을 가지지 못하고 0과 1로 몰리게 되는기울기 소실 문제가 발생한다.
시그모이드 함수를 미분하면 최대치가 0.3밖에 되지 않는다. x축이 -무한대 ~ +무한대 이므로, x축의 범위는 엄청나게 넓은 대신, y축은 0.3 ~ 0까지 밖에 범위가 되지 않으니, 값들이 몰리게 되는 현상이 발생할 수 밖에 없다. 이를 해결하기 위한 다른 개선 방안 함수들이 있다.
하이퍼볼릭 탄젠트의 경우 시그모이드를 두배로 늘렸으나, 결국 비슷한 문제가 발생한다.
가중치를 표준편차가 0.01인 정규븐포로 초기화할 때 각 층의 활성화 값 분포이다. 각 층의 그래프를 보게되면 활성화 값들이 0.5부근에 집중되어 있는 것을 확인할 수 있다. 이전 표준편차가 1인 정규분포일 때의 문제인 0과 1로 치우치는 것을 해결하여 기울기 소실 문제가 발생하지 않는다.
하지만 활성화 값이 치우친다는 문제가 발생한다. 다수의 뉴런이 거의 같은 값을 출력하고 있으니 뉴런을 여러개 둔 의미가 없어지게 된다. 각 층의 활성화 값은 적당히 고루 분포되어야만 한다.
가중치 초기값으로 Xavier 초기값을 이용할 때, 각 층의 활성화 분포가 이전 2개의 경우보다 훨씬 넓은 범위로 분포되어 있는 것을 확인할 수 있다. keras에서의 가중치 초기 값으로 xavier가 사용되는 것으로 알고 있다.
Relu 가중치 초기값
relu 활성화 함수의 가중치 초기값으로 0.01정규분포는 바람직하지 못하고, Xavier 초기값 또한 층이 거듭될 수록 한쪽으로 치우치는 경향이 발생한다. 따라서 relu에서는 "He"라는 다른 초기화 방식이 도입된다.
층이 거듭되어도 값에서 일정한 분포를 이루는 것을 확인할 수 있다.
케라스의 초기 값이 xavier이므로, relu함수를 사용할 때 가중치 옵션으로 "He"를 넣어 테스트해보는 것도 의미가 있을 것이라고 생각한다.
'인공지능' 카테고리의 다른 글
인공지능 이론(3주차) - 신경망 학습 이론 Ⅰ (0) | 2020.11.07 |
---|---|
인공지능 이론(2주차) - 머신러닝과 딥러닝 (0) | 2020.11.07 |
인공지능 실습(6주차) - 모델을 구성하고 학습하기 1 (0) | 2020.10.10 |
인공지능 실습(5주차) - 이미지와 openCV (0) | 2020.10.01 |
인공지능 이론(5주차) - 경사하강법과 오차역전파법 (0) | 2020.10.01 |