학습 관련 기술들

위 발표는 이효원님이 보내주신 발표 자료를 기반으로 참고사항을 추가해 각색하여 만들었습니다. 오류가 있는 부분은 저에게 말씀해주시고, 질문 및 기타 관련 사항 역시, 이효원님 혹은 저에게 말씀해 주시면 됩니다.

다음과 같은 목차로 진행됩니다.

신경망 학습의 목적은 손실함수의 값을 가능한 낮추는 매개변수를 찾는 것입니다. 이는 곧 매개변수의 최적 값을 찾는 문제이며 이러한 문제를 푸는 것을 최적화라고 합니다.

확률적 경사 하강법은 매 단계마다 전체 데이터 셋에 대해서 경사 하강법을 적용하는 배치 경사 하강법(BGD)은 시간이 너무 많이 걸리기 때문에 매 단계마다 일부의 데이터 셋을 무작위로 골라서 경사 하강법을 적용하는 방법입니다. BGD에 비해 계산 속도가 빠르고 SGD를 여러 번 반복하면 BGD의 결과와 유사한 값으로 수렴하게 됩니다.W는 갱신할 가중치 매개변수, 𝜕𝐿/𝜕𝑊는 W에 대한 손실함수의 기울기, 𝜂(에타)는 학습률 입니다. SGD를 파이썬 클래스로 구현해보았습니다. Lr은 학습률이고 params과 grads는 가중치 매개변수와 기울기를 저장하고 있습니다. Update 메소드는 옆의 수식을 그대로 구현한 것입니다.

(경사를 내려가면서, 별 위치에 가까워진다.)

앞선 그림들을 보면 알 수 있듯이 SGD는 다른 기법들에 비해 성능이 떨어지고 방향을 제대로 잡지 못하고 이상한 곳(예:지역 최소값)에서 수렴하기도 합니다. 그리고 비등방성 함수에서 탐색 경로가 지그재그로 나타나 비효율적입니다.

모멘텀 방식경사 하강법을 통해 이동하는 과정에서 일종의 관성을 주어서 지역 최소값에 머무르는 현상을 개선해줍니다. 현재 경사를 통해 이동하는 방향과는 별개로 과거에 이동했던 방식을 기억하면서 그 방향으로 일정 정도를 추가적으로 이동하는 방식입니다. V는 속도에 해당하고 기울기 방향으로 힘을 받아 물체가 가속된다는 물리 법칙을 나타냅니다. A값이 모멘텀 값으로 0.9로 설정합니다.

밑의 그림을 보면 SGD에서의 최적화 갱신 경로와 비교 했을 때 지그재그 정도가 덜한 것을 알 수 있습니다. 자주 이동하는 방향에 관성이 걸리게 되고, 진동을 하더라도 중앙으로 가는 방향에 힘을 얻기 때문에 SGD에 비해 상대적으로 빠르게 이동할 수 있습니다.

Adagrad 방식은 각 매개변수 마다 학습률을 개별적으로 적용하는 방식입니다. 변수 중에 많이 움직인(크게 갱신된) 변수는 최적 값에 가까이 있을 확률이 더 높기 때문에 학습률을 적게(학습률 감소를 크게) 해서 세밀한 값으로 조정하고 적게 움직인(작게 갱신된) 변수는 최적 값에 도달하기 위해 많이 이동해야 할 확률이 크기 때문에 학습률을 크게 (학습률 감소를 작게) 해서 빠르게 loss 값을 줄여나가는 방향으로 이동하자고 생각할 수 있습니다. H는 기울기를 제곱한 값에 h를 더한 값이다. $$1/root(h)$$로 학습률을 조정하는데 기울기가 클 수록 $$1/root(h)$$값은 작아지므로 학습률이 작아진다.

Adagrad 방식에서 무한히 학습하게 되면 $$1/root(h)$$이 0이 되어 갱신이 되지 않는 문제를 개선하기 위해 RMSprop 방식이 고안되었습니다. 지수 이동 평균을 적용해서 최근의 기울기 정보를 크게 반영하고 과거의 기울기 정보를 작게 반영해서 Adagrad 처럼 학습 속도가 단조적으로 줄지는 않습니다. 𝛼값은 0.9, 0.99, 0.999 중에 정해집니다.

모멘텀 방식과 RMSProp 방식을 합친 것으로 RMSProp 방식처럼 지수 이동 평균을 적용했고 변수 m, v의 값이 0으로 초기화 되어 있어서 편향 보정 과정이 있는 것이 특징입니다. $$𝛽_1 = 0.9$$, $$𝛽_2=0.999$$로 사용하고 Adam은 실전에서 기본 알고리즘으로 추천되고 있습니다. 더 자세한 설명은 https://arxiv.org/pdf/1412.6980v9.pdf 를 참조해주세요.

가중치의 초기값에 따라 은닉층의 활성화 값 분포가 달라지고 이에 따라서 학습의 성패가 갈립니다. 가중치 감소 기법이 있는데 이것은 오버피팅을 억제하기 위해 가중치 값이 작아지도록 학습하는 기법입니다. 작아지도록 하려면 애초에 작은 값으로 초기화하는 것이 좋기에 가중치는 작은 값으로 초기화 합니다.

활성화 함수에 시그모이드 함수를 사용했고 5개의 층으로 층마다 100개의 뉴런이 있고 입력 데이터는 정규분포에서 무작위로 1000개를 생성했습니다. 각 층의 활성화 결과를 activations에 저장하고 이 값의 분포를 히스토그램으로 나타낸 것입니다. 표준편차를 1로 했을 때의 활성화 값의 분포는 0과 1에 집중되어 있습니다. 시그모이드 함수는 출력이 0이나 1에 가까워지면 미분 값이 0에 다가갑니다. 그래서 데이터가 0과 1에 치우치게 되면 역전파의 기울기 값이 점점 작아지다가 사라집니다. 이 현상이 기울기 소실입니다.

시그모이드 등 요즘 많이 사용하는 활성화 함수들은 매우 비선형적인 방식으로 그들의 입력을 매우 작은 출력 범위로 짓이겨 넣습니다('squash'). 예를 들어서 시그모이드는 실수 범위의 수를 0~1로 맵핑하는데 그 결과로 매우 넓은 입력 범위가 극도로 작은 출력 범위로 맵핑 되어버립니다. 이렇게 되어 버린 입력 공간에서는 큰 변화가 있다고 하더라도 출력에는 작은 변화를 보이게 되는데 기울기가 작기 때문입니다.

이번엔 표준편차를 0.01로 바꾸어서 실행해보았습니다. 값들은 0.5부근에 집중되어 있습니다. 앞의 상황처럼 기울기 소실은 일어나지 않지만 활성화 값들이 치우쳤다는 것은 표현력 관점에 문제가 있는 것입니다. 다수의 뉴런이 거의 같은 값을 출력하고 있으니 여러 개의 뉴런을 둔 의미가 없어진다는 의미입니다. 이 두 상황을 봄으로써 각 층의 활성화 값은 적당히 고루 분포되어있어야 함을 알 수 있습니다.

사비에르 글로로트와 요슈아 벤지오의 논문에서 권장하는 가중치 값인 Xavier 초기값을 사용하면 앞의 두 상황에 비하면 넓게 퍼져있는 모습을 볼 수 있습니다. 시그모이드 함수와 tanh 함수(쌍곡선 함수)에서 Xavier 초기값을 사용하면 종 모양의 분포가 나타납니다.

활성화 함수로 ReLU함수를 쓰는 경우에는 ReLU함수에 특화된 He 초기값이 있습니다. 카이밍 히가 발견한 He 초기값은 표준편차가 $$2/root(n)$$인 정규분포를 사용합니다. 음의 영역이 0이라서 더 넓게 분포시키기 위해 Xavier에 비해 2배의 계수가 필요하다고 해석할 수 있습니다.

앞에서 가중치의 초기값이 각 층의 활성화 값 분포에 영향을 준다는 것을 보았습니다. 이번에는 각 층이 활성화 값을 적당히 퍼트리도록 강제하는 방법인 배치 정규화입니다. 배치 정규화의 특징은 학습 속도를 빠르게 해주고, 초기값에 크게 의존하지 않습니다. 그리고 오버피팅을 억제해줘서 다른 오버피팅 억제 기법들의 필요성을 감소시켜 줍니다.

배치 정규화미니배치 단위로 평균이 0, 분산이 1이 되도록 정규화를 수행합니다. 수식에서 $$𝜇_B$$는 평균, $$𝜎_B^2$$는 분산, $$x_i$$는 정규화된 데이터입니다. 𝜀은 0으로 나누는 것을 예방하기 위한 아주 작은 값입니다. 이렇게 배치 정규화를 하게 되었을 때 신경망의 비선형성이 사라질 수 있습니다. 예를 들어 시그모이드 함수에서 평균이 0이고 분산이 1인 정규화된 데이터의 범위는 -1~1인데 이 범위에서 그래프는 거의 직선으로 나타납니다. 비선형성이 있어야 복잡한 함수를 표현할 수 있습니다. 그래서 확대와 이동 변환을 수행합니다. 𝛾는 확대를 의미하고 𝛽는 이동을 의미합니다. 초기값은 𝛾=1, 𝛽=0으로 시작하고 이를 통해 정규화된 데이터의 범위를 바꾸어서 비선형성을 부여해줍니다.

오버피팅이란 신경망이 훈련 데이터에만 지나치게 적응되어 그 외의 데이터에는 제대로 대응하지 못하는 상태를 말합니다. 오버피팅은 매개변수가 많고 표현력인 높은 모델, 훈련 데이터가 적을 때 주로 발생합니다.

오버피팅을 억제하기 위해 가중치 감소를 사용하는데 오버피팅은 가중치 매개변수 값이 커서 발생하는 경우가 많기 때문에 큰 가중치에 대해 그에 상응하는 큰 패널티를 부과합니다. 여기서 말하는 패널티란 L2 regularization으로 구해진 $$1/2𝜆𝑊^2$$ 값 입니다. 이 값을 손실함수에 더해서 역전파를 구할 때 미분을 하게 되면𝜆W이 더해져서 가중치 감소를 더 크게 하는 것입니다. W는 가중치,𝜆는 정규화의 세기 조절 변수, $$1/2$$은$$1/2𝜆𝑊^2$$를 미분했을 때𝜆W가 나오게 하는 값입니다. 패널티를 구하는 방법에 L2 regularization 외에도 L1, L∞가 있습니다.


신경망 모델이 더 복잡해지면 가중치 감소만으로 대응하기 어려워지기 때문에 드롭아웃 기법을 사용합니다. 훈련 시 각 계층마다 일정 비율의 뉴런들을 임의의 정해서 삭제시키고 나머지 뉴런들만 학습시키는 방법입니다. 삭제한 뉴런에는 신호를 전달하지 않습니다. 역전파 때는 ReLU함수처럼 동작합니다. 순전파 때 신호를 통과시키는 뉴런은 역전파 때도 신호를 그대로 통과시키고 순전파 때 신호를 통과시키지 않는 뉴런은 역전파 때도 신호를 통과시키지 않습니다. 테스트할 때는 모든 뉴런에 신호를 전달하고 각 뉴런의 출력에 훈련 때 삭제한 비율을 곱해서 출력합니다.

하이퍼파라미터는 학습 과정 전에 설정되는 값으로 각 층의 뉴런 수, 배치 크기, 학습률, 정규화 세기 등이 있습니다. 이런 하이퍼파라미터의 값을 적절한 값으로 결정해야 신경망 모델의 성능이 좋아지는데 많은 시행착오를 필요로 합니다.

하이퍼파라미터의 성능을 평가할 때 시험 데이터를 사용하지 않는다는 것은 매우 중요합니다. 그 이유는 시험 데이터에 오비피팅 되기 때문입니다. 그래서 다른 데이터를 사용하는데 이를 검증 데이터라고 합니다. 검증 데이터는 따로 두어서 사용할 수도 있고 훈련 데이터의 일부를 검증 데이터로 사용할 수도 있습니다.

검증 방법에 k-fold 교차 검증이 있는데 이 방법은 전체 훈련 데이터를 k개의 부분으로 나누어 한 부분은 검증 데이터로 사용하고 나머지 k-1개 부분을 훈련 데이터로 사용해 k번 반복 수행할 때마다 검증 데이터를 바꿔주고 각 검증 데이터로부터 계산한 성능들을 평균 내서 하이퍼파라미터의 성능을 평가합니다.

results matching ""

    No results matching ""