[비전공자를 위한 딥러닝] 1.2 - 그래서 '학습'이 뭔데? (2)



난 시간에 당신은 스팸 메일 문제를 해결하려고 시도했다.
처음 시도한 방법은 규칙 기반 방법이었다. 어벙한 신참에게 일을 시키듯 '이걸 해라', '이건 하지 마라' 일일이 조건을 지정해주는 방법이었다.
하지만 이런 방법은 당장 몇 개의 메일을 분류하는 데는 유용할 수 있어도, 끝없이 쏟아지는 수많은 메일에 대해서는 예외가 너무 많이 발생할 수 있어 적합하지 않았다.
 
그래서 생각해낸 방법이 학습이었다. 기계를 학습시킬 수 있다면, 일 잘하는 김대리처럼 알아서 좀 융통성 있게 잘 분류할 수 있지 않을까? 이것이 바로 '머신러닝'의 발상이다. 우리는 학생의 학습과 기계의 학습을 비교하며 이해할 수 있었다.

그런데 이렇게 학습시킨 기계를 어떻게 사용해야 스팸 메일 문제를 해결할 수 있을까?
우선 머신러닝의 진행 과정을 크게 나누어 살펴보자.


 

1단계 학습

2단계 추론

 

위에서 살펴본 학습 알고리즘은 학습(learning)에 해당한다. 기계를 학습시킨다는 의미에서 훈련(training)이라고도 한다. 그리고 학습된 그 모델을 가지고 새로운 데이터를 예측하는 것이 추론(inference)에 해당한다. , '스팸 메일 분류 기계'라는 완제품을 가지고 새롭게 쏟아지는 메일들을 분류하는 것이다.
 
하지만 제품을 현장에 투입시키기 전에, 학습이 잘 되었는지 확인하는 절차가 필요하다. 왜냐하면 우리가 학습시킨 기계가, 학습하는 동안에 분류했던 메일만 잘 분류하고 새로운 메일을분류하는 능력은 훨씬 떨어질 수 있기 때문이다우리가 원하는 것은

이미 분류해본 메일만 잘 분류하는 기계가 아니라,
새로운 메일도 잘 분류할 수 있는 기계를 원하는 것이다.



따라서 기계가 잘 학습이 되었는지 테스트하는 시험(test)이 필요하다.
따라서 '1. 학습'을 다음과 같이 두 단계로 나눈다.
 

1단계 학습

 학습
② 시험

2단계 추론


 



1강에서는 메일 4개를 직접 레이블링하는 것으로 마쳤지만, 실제 머신러닝을 진행하기 위해서는 상당히 많은 데이터가 필요하다. 당신에게 1000개의 레이블링 된 메일 데이터가 있다고 상상하자. 레이블링이 뭔지 헷갈린다면 1강을 복습하자.
 
이제 당신은 이 1000개의 데이터로 1단계 '학습'을 진행해 '스팸 메일 분류 기계'를 만들 것이다. 하지만 1000개를 모두 ' 학습'하는 데만 사용한다면 '② 시험'을 진행할 수가 없다. 따라서 당신은 1000개 중 800개를 학습에 사용하고, 200개를 학습이 끝난 후 시험에 사용하려고 한다
이때 반드시 시험에 사용될 200개의 데이터는 학습하는 동안에 기계가 접근할 수 없게 해야한다. 시험 문제를 미리 본다면 기계가 자신의 예측 능력이 아닌 '정답 외우기' 능력을 사용해 시험을 잘 볼 수도 있기 때문이다.
 
학습을 위해 떼어놓은 800개의 데이터를 훈련 데이터(training data)라고 하고,
시험을 위해 떼어놓은 200개의 데이터를 시험 데이터(test data)라고 한다.

이 두 데이터 세트는 1단계 '학습'을 위해 레이블링 된 데이터 전체를 두 덩어리로 나눈 것이다.



이 부분에 대해서는 3.2장에서 더 자세히 다뤄볼 것이다.
 

신은 이제 다시 기계가 된다.
그리고 1단계 '학습'' 학습'을 진행한다. 머신러닝 모델의 학습 알고리즘을 진행하는 것이다.
참고로 여기서 주어지는 데이터는 훈련 데이터다.
 
이것은 앞으로 진행되는 머신러닝 강의를 이해하고 감을 잡을 수 있는 중요한 체험이므로, 천천히 생각하면서 진행하기 바란다.

학습에 앞서 용어를 잠깐 정리하자.
완성된 모델을 가지고 실제 현장에서 예측하는 2단계 '예측'과 헷갈릴 수 있기 때문에, 1단계 '학습' 단계에서 당신이 예측하는 답은 '가설(hypothesis)'이라고 부르기로 하자.

        머신러닝 모델의 학습
  1. 정답을 치워둔다. (안 보이게 ' '로 처리한다.)
  2. 데이터를 바탕으로 예측을 한다.
  3. 기계가 한 예측(가설)과 실제 레이블을 비교한다.
  4. 틀린 예측들에 대해서 예측 방향을 실제 레이블에 가까워지도록 수정한다.
  5. 이 과정을 반복한다.
 이 부분이 기억나지 않는다면 1강을 복습할 것

이제 당신의 임무가 시작된다.
학습을 '1회'차로 선택하고 주어지는 명령을 수행해보자.*


1단계

1. 학습

회차



초록색: 예측한 가설과 정답이 같은 경우
노란색: 예측한 가설과 정답이 근소하게 차이나는 경우
빨간색: 예측한 가설과 정답이 크게 차이나는 경우

방금 진행한 과정이 바로 학습 '1'라고 할 수 있다.
주어진 훈련 데이터를 한 바퀴 돌았다는 것인데, 이를 에포크(epoch)라고 한다.
현재 '가설-정답' 칸에서 초록색이 몇 개인지 세어보자. 아직 하나도 없을 수도 있다. 그 개수를 총 훈련 데이터의 개수인 10으로 나누면, 학습 1회차의 정확도, '1훈련 정확도'가 된다. 일단 그 정확도를 다음 보고서에 기록해두자.
 


 보고서 ] 



첫 번째 에포크인 '1회'에서는 아직 학습된 정보가 아무것도 없기 때문에, 무작위로 찍은 것이다. 그렇다면 이제 무작위로 찍은 가설과 실제 정답을 비교하고 피드백을 받을 차례다.
위의 표로 다시 돌아가, '1''2'로 변경하고 주어지는 명령을 수행해보자.

'2회'를 완수했다면, 마찬가지로 '가설-정답' 칸에서 초록색이 몇 개인지 세어보자. 이것을 10으로 나누면 '2훈련 정확도'가 된다. 이것도 보고서에 기록하자.
그리고 2회와 똑같은 명령이 기다리고 있는 '3'를 수행하며 학습을 진행해보자.

'3'를 완수했다면, 마찬가지로 '가설-정답' 칸에서 초록색이 몇 개인지 세어보자. 이것을 10으로 나누면 '3회 훈련 정확도'가 된다. 마찬가지로 보고서에 기록하자.
, 이제 1, 2, 3회를 진행하며 정확도가 어떻게 변했는지 한눈에 파악해보자.
회를 거듭할수록 증가했을 것이다.
이렇게 훈련 정확도가 회차를 거듭하면서 증가하는 것이, 학습이 잘 되어간다는 첫 번째 증거라고 할 수 있다.
 
당신은 이제 1단계 '학습' 과정 속 '학습'이 어떻게 진행되는지 간략하게 체험해보았다. 실제 머신러닝에서는 수십, 수백 회까지 진행하기도 한다.
이런 학습이 종료되면, 'Test Data'를 가지고 '② 시험'을 보게 된다. 시험 결과시험 정확도를 가지고 우리는 모델의 능력을 객관적으로 파악할 수 있는 것이다.

시험 정확도가 만족스러운 성능을 낸다면, 마침내 우리의 '스팸 메일 분류 기계'는 학교를 졸업하고 현장으로 투입될 수 있는 것이다. 그리고 그 녀석에게 주어지는 임무가 바로
 

2단계 '예측' 인 것이다.

 


이렇게 1강과 2강을 통해, 우리는 학습과 예측이 어떻게 이루어지는지 간략하게 살펴보았다.
학습에 대해서 아직 구체적인 감이 잡히지 않더라도 괜찮다. 지금은 'Chapter 1: 큰 그림 살펴보기' 단계이기 때문에, 전체적인 그림만 어렴풋이 파악해도 성공한 것이다.

다음 강의에서는 인공지능, 머신러닝, 딥러닝이라는 용어가 정확히 어떤 관계인지 한방에 정리해보는 시간을 가져볼 것이다.




댓글 쓰기

13 댓글

  1. 학습 과정을 직접 체험해 볼 수 있다는게 좋네요 ~. 학습 내용이 어떻게 레이블에 대한 스팸메일 분류로 이어지는지가 궁금해요.

    답글삭제
    답글
    1. 감사합니다! Chapter 2에서 머신러닝 알고리즘에 대해 자세히 살펴볼 예정입니다 :)

      삭제
  2. 하나씩 이해의 정도가 깊어가는 것 같네요~~~~~ 다음 강의도 궁금해지는군요

    답글삭제
    답글
    1. 감사합니다! 도움이 되었다니 기쁘네요 :)

      삭제
  3. 2강 시작하면서 지난 시간 1강의 내용을 친절하게
    정리해 주니까 더욱 이해가 잘 되어 참 좋네요
    다음 3강도 기대됩니다^^

    답글삭제
    답글
    1. 감사합니다! 다음 강의도 열심히 준비하겠습니다 :)

      삭제
  4. 강의 잘 듣고 가요!

    답글삭제
  5. 굳굳! 테스트 작동하는 거 신기하다ㅋㅋ

    답글삭제
    답글
    1. 감사합니다! 이번 강의의 퀴즈는 만드느라 정말 고생 좀 했습니다ㅎㅎ

      삭제
  6. 1회차 학습에서 무작위로 입력한 가설을 정답과 비교해서 얻은 가설/정답(오차값) 으로 부터 다음 학습 회차시 해당 가설값을 가설/정답이(오차값) 0이 되도록 바로 업데이트 하지않고 오차값의 범위에 따라 1 혹은 3을 더하거나 빼주는 방식으로 진행되는 이유가 무엇인가요?

    예를 들어 가설에 6을 넣었는데 정답이 10이라면 오차값이 -4가 나오는데 여기에서 바로 6이었던 가설값에 4를 더해줘서 10으로 만들어 주지 않고 굳이 3이라는 특정값을 더해줘서 여전히 -1이라는 오차값이 나오게 만들어주는 이유가 무엇일까요?

    답글삭제
    답글
    1. 오타* 10(X) --> 0으로 만들어주지 않고

      삭제
    2. 안녕하세요, 좋은 질문입니다.
      간단히 말씀드리자면, 오차값을 0으로 만드는 최적값을 바로 구할 수 없기 때문입니다.
      머신러닝에서는 그 최적값을 찾기 위해 각각의 가중치를 + 방향으로 움직여야 할 지, - 방향으로 움직여야 할 지 계산하여 업데이트하며 학습을 진행합니다.
      이 내용은 앞으로 나올 포스팅에서 다루고 있으며, 질문하신 부분을 직접적으로 다루고 있는 부분은 [2.5 신경망 (3) - 경사하강법] 장입니다. (https://www.philgineer.com/2021/09/25-3.html)

      삭제