시작하기
인간에게는 ego와 업보가 있듯이, 기계 학습에게는 과학습 이라는 것이 붙어 다닙니다. 숙명이라고 할 수 있지요. 따라서 최근의 신경망 라이브러리는 과학습을 방지하기 위한 몇 가지 기능이 포함되어 있습니다. 이번에는 그중에서 대표적인 것을 3가지 소개합니다.
1. 정규화 (Regularization)
과학습의 원인은 특정 학습 데이터로만 학습을 지나치게 해서 미지의 데이터에 대한 오차(일반화 오차)가 역으로 증가해 버리는 것입니다.
이를 방지하기 위한 정규화는 한마디로, "극단적이라 생각되는 의견은 듣지 않는다"는 것입니다. 즉, 모델을 복잡하게 하는 가중치는 그 양에 따른 페널티를 부여하여 모델이 복잡해지지 않도록 하는 것입니다.
정규화는 일반적으로 다음의 두 가지가 이용되고 있으며, 이 두 가지를 조합해 사용할 수 있습니다.
L1 규범 정규화 (Lasso 회귀) : 극단적인 데이터의 가중치를 0으로
L2 규범 정규화 (Ridge 회귀) : 극단적인 데이터의 가중치를 0에 가깝게
회귀 분석이란? 회귀에 대해 간략하게 설명하겠습니다. 회귀 분석은 한마디로 '많은 데이터를 펼쳤을 때 그 관계를 나타내는 선(함수)을 찾는 것'입니다. 선형(1차 함수)로 표시하면 선형 회귀이지만, 2차 이상의 곡선으로 나타날 때는 비선형 회귀로, 그 선을 '회귀 곡선'이라고 합니다(그림 1).
또한 norme이란 벡터 공간에서의 거리 개념입니다. 아래 그림에서 보면, 회귀선과 점과의 거리가 norme입니다.
|
"정규화는 일반 회귀와 무엇이 다른가?"
오, 다시 어려운 질문입니다. 이런 난제에 어떻게 대답하면 좋을까요?
일반 회귀는 데이터의 오차(플롯 선과의 거리 : norme)를 줄이는 식으로 계산된다지만, norme의 크기에 관계없이 플롯은 영향도가 같습니다.
정규화는 거기에 더하여 오차에 따른 페널티(가중치를 0 또는 0에 가깝게)를 부여하는 점이 다릅니다. 그림 1로 말하면 좌표(38, 41)는 회귀 곡선과 떨어져 있기(극단적이라고 생각되는 데이터) 때문에 페널티를 줘서 영향을 줄이는 것입니다.
과학습을 현실사회에 비유하면 문제를 일으키는 회사에나 있을법한 '나에겐 상식, 남에겐 비상식'과 같은 것입니다. 비상식적인 내용을 시끄럽게 떠드는 임원과 직원들을 통째로 판단하는 미스를 저질러서는 안 됩니다. 일반적인 회귀는 비상식적인 의견도 평등하게 듣는 것입니다만, 정규화의 경우 거기에 더하여 비상식의 정도에 따라 무시하거나(L1), 반만 듣는(L2) 것입니다.
지금의 신경망 라이브러리는 이러한 정규화 매개 변수를 지정할 수 있도록 되어있습니다. 그러나 함부로 정규화를 사용하려고 하면 반대로 학습부족(Under fitting)이 되고 정확도가 떨어질 수 있으므로 주의하시기 바랍니다.
2. 드롭아웃(Drop out)op out)
드롭아웃은 그림 2와 같이 "랜덤으로 노드를 비활성화하여 학습" 처리합니다. 그림 1의 회귀 곡선으로 말하면, 플롯을 바탕으로 선을 긋는 대신에 어느 정도 선별된 플롯에 대하여 회귀선을 긋는 것과 같습니다.
과학습 데이터가 많다는 이미지에서, 과연 선별하면 더 좋아질까?라고 생각하기 쉽습니다만...
이 질문에 대답하기 위한 중요한 포인트는 의외로 놓치기 쉬운 부분입니다.
힌트는 "기계 학습은 같은 훈련 데이터에서 여러 번 학습을 반복한다는 것" 입니다.
예로 설명을 드리면, 직장에 영희가 있다고 칩시다. 매일 얼굴을 맞대고 있기 때문에 영희가 "열심히 일하는 밝은 아이"라는 것은 충분히 알고 있습니다. 자신은 누구보다 그녀를 잘 알고 있다고 생각합니다. 하지만 어느 날, 클럽에서 우연히 만났는데, 척척 일하던 모습은 비활성화되어 있고, 간지 쩌는 그녀가 거기에 있었습니다. 오~ 이런 모습도 좋네요 라고 감동한 당신이 귀중한 기회를 놓치지 않고, 인생 최대의 용기를 내어 데이트 신청에 성공했다고 칩시다. 그러나 다음 주, 데이트로 함께 영화관에 갔을 때는 영희가 상당히 지각을 해버려 무책임한 일면도 엿볼 수 있었습니다.
이러한 모든 모습이 그녀의 것입니다. 근처에서 계속 영희를 보고 있었는데, 자신은 그녀의 무엇을 알고 있었던 것일까요? 그녀의 다양한 측면을 알고 지금에서야 "나는 진짜 영희를 잘 알고 있다"고 마음속 깊이 생각하는 것입니다.
드롭아웃도 원리는 똑같습니다. 학습 때마다 무작위로 비활성화되는 노드가 선택되기 때문에 실상은 같은데 매번 다른 가중치가적용됩니다(그림 1로 말하면 다른 회귀선이 그려진다). 일반(전체 노드 활성화) 상태에서 200회 학습하면 과학습이 되는 경우에도 매번 무작위로 노드 상태를 바꾸어 200회 학습하여 그 결과를 종합하여 앙상블 학습을 하면, 일반화 성능이 높아지고 과학습이 일어나지 않습니다.
앙상블 학습 (Ensemble learning) 앙상블 학습이란 개별 학습한 여러 학습기를 융합시켜 일반화 능력을 향상시킨 기계학습 기술입니다. 예를 들어, 기계 학습에서 자주 사용되는 랜덤 포레스트는 여러 의사 결정 트리의 결과를 평균화하는 앙상블 학습을 이용한 방법입니다.
드롭아웃은 하나의 학습기인데 매번 무작위로 비활성화 노드를 결정하여 허위로 앙상블 학습을 실시하고 있는 것입니다.
|
최근의 신경망 라이브러리는 드롭아웃 기능도 가지고 있으며, 입력층 20%, 은닉층 50%, 전 결합층 30%와 같이 계층마다 매개변수를 지정할 수 있습니다.
3. K분할 교차 검증(K-fold cross-validation)
앞에서 훈련 데이터와 평가 데이터를 분리하는 홀드 아웃 방법과 추가 테스트 데이터를 별도로 보관해 두는 방법을 설명했습니다. 이것을 더욱 진행한 것이 K 분할 교차 검증(크로스 검증)입니다. 이름은 왠지 어려울 것 같습니다만 방법은 매우 간단합니다. 이것도 잘 기억해 둡시다.
그림 3은 학습 데이터가 12,000인 경우 K=5로 했을 때의 교차 검증입니다. K=5 이므로 학습 데이터 중 훈련에 사용한 데이터 (10,000)을 5 분할하여 1회 첫 4개를 학습 데이터에 사용하고 나머지 하나를 평가 데이터로 사용합니다. 두 번째 학습에서는 4 번째의 데이터를 평가 데이터로 사용하는 식으로 역할을 바꾸어 총 5회 학습합니다. 그리고 5회 학습 결과의 평균을 취한 것이 훈련에 의한 인식률이 될 것입니다.
K 분할 교차 검증도 데이터 집합을 K개로 나누어 각각 학습한 결과를 종합해서 평가하는 것으로 일종의 앙상블 학습이라고 할 수 있습니다. 그런 의미에서 K 값을 10이나 20으로 하는 쪽이 과학습 방지에 효과가 있습니다만, 이는 그리 쉬운 일이 아닙니다.
그림 3의 학습 1은 10,000개의 데이터를 1회전 학습하고 끝이 아닙니다. 평가를 높이기 위해 여러 번 데이터를 돌린 결과(과학습이 되지 않을 정도로) 최고의 평가를 얻은 곳에서 학습 1이 드디어 끝납니다. 라이브러리에서 K의 매개 변수를 20으로 하는 것은 간단하지만, 보통의 학습에 비해 20배나 학습하게 된다는 점에 유의하십시오.
또한, K분할 교차 검증을 선택한 경우에도 테스트 데이터는 따로 설정할 필요가 있을까요? 대답은 "YES"입니다. 위와 같이 학습 1 ~ 학습 n의 각 회전마다 평가 데이터 값이 높아지도록 조정하는 것이므로, 마지막에 테스트 데이터로 확인하지 않으면 진정한 성능을 측정할 수 없습니다.
정리
이상 과학습을 방지하는 기술로 정규화, 드롭아웃, K분할 교차 검증을 알아봤습니다. 이러한 기술을 라이브러리에 구현하자면 통계 및 수학적 지식이 필요하지만, 라이브러리를 사용하여 기계 학습을 실행하자면 파라미터의 의미를 이해하는 것이 더 중요합니다. 자동차 엔진의 구조를 몰라도 엑셀과 브레이크의 사용법을 알고 있으면 운전할 수 있는 것과 같습니다. 자동차 운전과 마찬가지로, 나머지는 연습이 있을 뿐입니다. 시행착오를 거쳐 자신만의 운전 요령을 잡으십시오.
'AI · 인공지능 > 알기쉬운 AI' 카테고리의 다른 글
[알기쉬운 AI - 25] 회귀 (Regression) (0) | 2020.04.25 |
---|---|
[알기쉬운 AI - 24] Q 학습 (Q-Learning) (0) | 2020.04.04 |
[알기쉬운 AI - 23] P 값과 Q 값 (3) | 2020.03.25 |
[알기쉬운 AI - 22] 강화학습과 도적 알고리즘 (0) | 2020.03.18 |
[알기쉬운 AI - 20] 비정상적인 과학습 (0) | 2020.02.10 |
[알기쉬운 AI - 19] 머신 러닝의 학습 데이터 (0) | 2020.02.08 |
[알기쉬운 AI - 18] 계층 신경망 (0) | 2020.02.05 |
[알기쉬운 AI - 17] 기계 학습 방법 (0) | 2020.02.04 |