본문 바로가기
AI · 인공지능/알기쉬운 AI

[알기쉬운 AI - 17] 기계 학습 방법

by 두우우부 2020. 2. 4.
반응형


이제 AI의 전체 이미지는 얼추 잡았다고 생각되기에, 눈을 가까이 가져가 딥러닝의 구조를 이해해 보고자 합니다.

기계 학습이란?
기계 학습은 컴퓨터를 학습시켜 인간처럼 인식하고 판단하게 하는 인공 지능 기법의 하나입니다. 고용한 사람에게 업무 내용을 알려주고 일을 시키는 것과 마찬가지로, 기계 학습의 과정은 그림 1과 같이 '학습 처리'와 '판정 처리'의 두 단계로 이루어집니다.

 

(1) 학습 처리

기계 학습의 진행 방식(라이브러리)이 아무리 우수해도 아무것도 훈련하지 않으면 갓난아기와 같습니다. 먼저 훈련 데이터를 사용하여 교육함으로써 학습기가 점점 똑똑해지고 이 정도면 충분하다고 생각되는 수준까지 도달하면 드디어 학습된 모델이 완성됩니다.


(2) 판정 처리

학습된 분류기(학습된 모델)는 미지의 데이터가 어떤 데이터인지 판단하고 추정합니다. 예를 들어, 꽃의 이미지를 라벨(꽃 이름)과 함께 학습시킨 분류기는 학습한 데이터와 정확히 일치하진 않더라도 제시된 꽃 그림을 보고 경험치로부터 '장미'라고 올바르게 추정하여 판정합니다.

 

그림 1 : 기계 학습의 구조

미니배치 학습법

기계 학습은 알고리즘보다 데이터가 더 중요하다고 잘 알려져 있습니다. 실제로 목적에 맞는 알고리즘을 선택하는 것도 중요하지만, 학습 데이터의 양과 질은 더욱 중요합니다. 주로 대량의 데이터가 필요한 것으로 알려져 있습니다만, 양뿐만 아니라 품질도 매우 중요합니다. 저품질(사람도 판정이 불가한) 데이터로 학습하면 정확도가 오히려 떨어집니다.

기계 학습은 1회 학습하고 끝이 아닙니다. 예를 들어 10,000장의 사진을 사용하여 훈련한다 해도 1회 진행했다고 끝나는 것이 아니라, 10회, 20회 같은 훈련 데이터로 재교육을 반복합니다. 이렇게 함으로써 학습기도 '조금 전까지는 몰랐지만, 지금이라면 알 거 같아'라는 식으로 인식의 정확도가 점점 높아지는 것입니다.

사실 이러한 학습 데이터를 단번에 돌리는 배치학습 대신 더 작은 단위(배치크기라고 합니다)로 학습을 반복하는 미니배치 학습 방법이 많이 사용되고 있습니다. 9,000장의 사진을 통해 학습하는 케이스로, 배치 사이즈는 60, 배치 횟수 200회, epoch 횟수(학습용 사진 전체를 한번 사용했을 때 한 epoch가 지나갔다고 말합니다)가 20인 예(그림 2)로 설명합니다.

 

9,000개의 데이터에서 무작위로 60개를 추출(샘플 1)하여 학습한 후, 다시 무작위로 60개를 추출(샘플 2)하여 학습합니다. 이것을 200회 반복하여 1 epoch 학습이 완료됩니다. 이것을 총 20회 실시하는 것입니다.


왠지 근육 트레이닝과 비슷하네요. 스쿼트 60회를 200세트 하고 그것을 20번 반복하는 것입니다. (다리 아작나겠네요...) 세트가 끝날 때마다 거울 앞에서 점점 말벅지가 되어가는 것을 넋 놓고 바라보는 것입니다...

근데, 9,000개의 데이터를 쭉 학습하는 것으로 20회 배치 학습을 하면 안 됩니까? 요런 소박한 의문이 솟아나지요? 사실 안되는 것은 아니지만, 미니배치 학습은 '확률적 경사 하강법(Stochastic gradient descent:SGD)' 요소가 들어가기 때문에 학습 효과가 더 높아지는 것으로 알려져 있습니다.

 

경사 하강법
경사 하강법은 한마디로 오차를 줄이기 위해 자율 조정하는 방법입니다.
나중에 오차 역전파라고 오차를 작게 하는 방법을 또 설명하겠지만 일단 여기서는 그렇게 알고 넘어가세요~


경사 하강법에는 여러 가지 방법이 있습니다. 그중 미니배치 학습의 확률적 경사 하강법은 학습 데이터 중에서 무작위로(어떤 배치 사이즈의) 데이터를 검색하여 그 데이터로 학습하여 오차를 내고, 그 오차가 줄어들게 학습기를 조정하는 방법입니다.

키워드는 '미니배치마다 경사 밸런스'와 '랜덤 데이터 추출'입니다. 일반 배치 학습이 오차를 조정할 때, 미니배치 학습은 60회 돌릴때 마다 오차를 조정합니다. 세트가 끝나고 나서 거울을 보는 것이 아니라 스쿼트 60회마다 거울 앞에 서서 허벅지를 체크하는 나르시스트 타입입니다.

또한 9,000개의 데이터를 순서대로 60개씩 추출하여 150회 학습하면 학습 데이터를 남기지 않고 중복 없이 효율적으로 사용할 텐데…. 라고 생각하시겠지만, 그러지 않고 매번 무작위로 60개의 데이터를 추출합니다.

개인적으로 epoch마다 추출하는 데이터 세트를 랜덤하게 변경한다면 순서대로 잘라서 쓰는 쪽이 더 데이터를 효율적으로 사용할 수 있어 좋을 것 같다는 생각이 있습니다. 언젠가 비교하여 효과를 시험해보고 싶은 생각입니다.

 

그림 2 : 미니배치 학습법


홀드 아웃 법

귀중한 학습 데이터이지만 모두 다 훈련에 사용하지는 않습니다. 준비한 학습 자료 중 훈련에 사용하는 훈련 데이터 외에 숙련도를 확인하는 평가 데이터를 확보해 둡니다. 그리고 평가 데이터의 정확성을 체크하며 학습을 진행합니다.

이러한 학습 데이터를 훈련 데이터와 평가 데이터로 나누는 방법을 홀드 아웃 법이라고 합니다. 언뜻 보면 이 정도로 충분한데도 평가 데이터가 좋아지도록 튜닝하면서 학습하기 때문에, 아무래도 편차가 생겨 버립니다.

 


그래서 최근에는 그림 3과 같이 평가 데이터와는 별도로 테스트 데이터를 따로 마련해둡니다. 테스트 데이터는 훈련에 사용하지 않습니다. 결국 분류기의 정답률과 정밀도가 요구하는 수준에 도달했는지 여부를 이 테스트 데이터로 판정하는 것입니다. 이상적인 건 같은 사람이 테스트 데이터를 제공하는 것이 아니라, 다른 사람으로부터 다른 경로로 받는 것이 좋다고 합니다(시스템 개발의 테스트와 같네요).

'좋아, 많이 알게 된 거 같아'라고 자신감을 얻은 분류기에게 '그럼, 이제 졸업시험 봐야지~'라며 전혀 알 수 없는 테스트 데이터로 테스트하고, 거기서 요구하는 정확도를 달성할 수 있다면 간신히 합격입니다. 이러한 이유로 튜닝을 테스트 데이터로 진행하는 것은 안 좋은 방법이며, 요구하는 정확도에 도달하지 못하면 다시 학습을 시작해야 합니다.

 

그림 3 : 평가 데이터와 테스트 데이터를 나누어 학습

 

정답률과 재현율과 정확도

위에서 분류기의 '정확도'라고 했습니다만, 엄밀히 말하면 평가에 사용하는 지수는 정답률(Accuracy), 재현율(Recall), 정확도(Precision)의 세 가지를 구사할 수 있습니다(그림 4).

 

그림 4 : 정답률과 재현율과 정확도

 

장미 사진 10장과 장미 이외의 꽃 이미지 20개를 사용하여 장미를 분류한 예에서 살펴보겠습니다. 10개의 장미 이미지 중 제대로 장미로 분류한 수가 8장, 20장의 장미가 아닌 이미지 중 실수로 장미로 분류한 것이 3장이라고 합시다(표 1).

정답률은 단순히 '모든 데이터에 대한 정답 수의 비율'이므로 아래 표시된 계산대로 83.3%입니다. 한편, 재현율과 정확도는 전체 데이터가 아닌 '장미로 분류한 데이터에 대한 평가'입니다. 아래의 계산식에 따라 재현율(장미 이미지를 몇 장이나 장미로 인식했는가)은 80%, 정확도(장미로 분류한 데이터 중 얼마나 진짜 장미였는가)는 72.7%입니다.

정답율 : (8 + 17) / 30 = 83.3%
장미의 재현율 : 8 / (8 + 2) = 80%
장미의 정확도 : 8 / (8 + 3) = 72.7%
조화 평균(F값) : 2 ☓ 재현율 ☓ 정확도 / (회수율 + 정확도) = 2 ☓ 80 ☓ 72.7 / (80 + 72.7) = 76.2

 

장미 (10 사진) 

장미 이외(20 사진) 

장미로 분류

8

3

장미 이외로 분류

2

17

표 1 : 분할표 (붉은색은 오인식 된 건)


언뜻 보면 항상 정답률로만 평가하면 좋을 듯 보이지만 어떨까요? 예를 들어, 이미지에 의한 품질 검사기 (Anomaly detection 또는 Diagnostics)라고 하여 '장미'를 '이상'으로 대체하려고 합니다. 이 경우 가장 중요한 것은 이상한 제품을 놓치지 않는 재현율이므로, 의심스러우면 처벌한다는 자세로 임곗값을 낮춰 재현율을 높여줍니다. 이 경우 이상 없는 제품도 이상하다고 간주하는 경우가 많아지니까 정확도는 희생되고, 그 결과 정답률도 낮아집니다.

따라서 재현율과 정확도는 트레이드 오프의 관계에 있습니다. 따라서 모두 통합하여 평가하는 조화 평균(F값)이라는 지표도 있습니다. 재현율과 정확도를 모두 균형 있게 높인 경우 F값이 커지도록 분류기를 조정합니다.


과학습과 일반화 오차

기계 학습에서 주의해야 할 것이 '과학습'입니다. 동일한 학습 데이터로 여러 번 반복 훈련하면 그만큼 '공붓벌레'가 돼버려, 그 이외의 진짜 데이터에 대한 인식률이 오히려 떨어집니다. 따라서 학습할 때 평가 데이터의 정확도 향상을 확인하고 어느 정도 선에서 학습을 종료하는 결단이 필요합니다.

분류기의 인식률은 교육에 사용한 평가 데이터로 측정해서는 안 됩니다. 반드시 새로운 테스트 데이터로 측정하여 오차 ◯%인지 확인해야 합니다. 이러한 알 수 없는 데이터에 대한 오류를 '일반화 오차'라고 합니다. 또한 일반화 오차가 작은 것을 '일반화 능력이 높다'고 합니다.

과도한 학습을 방지하는 기술로는 정규화, 드롭아웃, K 분할 교차 검증 등이 있으며, 모두 유효합니다. 이러한 내용은 나중에 다시 설명하겠습니다.

운용의 포인트는 합격(타협) 라인을 결정하는 것입니다. 정답률과 재현율이 몇 퍼센트 이상이라면 충분하다고 결정하지 않으면 정답률 포화가 왔을 때 좋은지 어떤지 판단할 수 없습니다.

그리고 목표에 도달하지 못할 것 같은 경우에는 학습 자료를 검토하여 데이터양을 더 늘리든지 저품질 데이터를 제거하고 다시 하는 수밖에 없습니다. 때에 따라서는 데이터뿐만 아니라 기계 학습의 매개변수를 바꾸거나 알고리즘 자체를 다른 모델로 바꿀 필요도 있습니다.


Variance와 Bias

특정 데이터를 과학습하여, 그 데이터에 의존하는 모델이 되어 버리고 일반화 오차가 커지는 것을 편차(variance)가 크다고 합니다(Overfitting). 반대로, 데이터에 학습 부족으로 모델이 너무 단순해서 일반화 오차가 큰 경우는 편향(bias)이 크다고 합니다(Underfitting).


편향과 편차는 트레이드 오프의 관계에 있고, 둘 사이의 균형을 잘 취하면서 훈련해야 합니다(그림 5). 말로 하면 어렵지만, 여러 번 돌리다 보면 요령이 생깁니다. 안될 것 같으면 빨리 포기하고 데이터를 재검토할 부분을 찾는 것이 좋습니다.

그림 5 : 편향과 편차

활성 학습

활성 학습이라고 하면, 양방향 참여형 교육을 연상케 합니다. 하지만 기계 학습의 활성 학습은 그것과는 전혀 다른 의미로, 실전 운용 하면서 자연스럽게 추가학습 하는 것을 말합니다.

기계 학습의 기본은 그림 1과 같이 학습 자료를 제공하고 학습 완료된 분류기를 사용하여 미지의 데이터를 판정하는 스타일입니다. 이 스타일에서 매우 중요한 것은 일반 컴퓨터의 계산 결과와 달리 인공 지능은 100% 정답이라고 생각하지 않는다는 것입니다. 따라서 일반적으로 인공 지능의 판단 결과를 인간이 확인하며, 만약 잘못되면 정답을 수정하는 작업이 포함됩니다.

이 인간이 수정한 데이터를 사용하여 추가로 학습시키는 것이 활성 학습입니다. 활성 학습은 그림 6과 같이 두 가지 방법이 있습니다.


(1) 인간이 전부 체크

분류기의 출력을 인간이 전부 체크하고 잘못된 것을 수정하여 추가 학습 데이터로 사용합니다. 종합 건강 진단처럼 인공 지능이 인간이 놓치는 부분을 방지하는 경우에 유용합니다. 글을 쓸 때, 탈고 후 교정작업이 오타 등의 문자에 밑줄을 그어 주면 실수를 잡아내기 쉬운 것과 같습니다.


(2) 정밀도에 의한 선택 체크

분류기는 판정한 식별 결과에 대하여 신뢰도(Confident)를 지정합니다. 이 신뢰도가 높은 데이터는 틀림없다고 확인만 된다면, 신뢰도가 낮은 데이터들만 인간이 점검하여 추가로 학습합니다. 이는 제조업의 품질 검사처럼 일반적으로 신뢰도가 높은 데이터에 드물게 신뢰도가 낮은 데이터가 섞이는 경우 인간의 작업을 크게 줄여줍니다.

어차피 두 방법 모두 'AI냐 인간이냐'가 아니라, 'AI가 인간을 지원'하는 스타일입니다. 실시간 추가 학습도 생각할 수 있지만, 인간이 수정된 데이터를 일정 기간(일정량) 모아서 일괄적으로 학습시키는 경우가 보통입니다.

 

그림 6 : 기계 학습의 Active Learning

정리

이제 기계 학습은 어떤 식으로 학습하는 것인지 어느 정도 이미지가 떠오르리라 생각됩니다.

다음은 잘 알고 있는 것 같아도 의외로 알려지지 않은 머신러닝과 딥러닝의 차이와 신경망의 구조에 관해 설명하겠습니다.

 

반응형