지난 시간에 간단하게 머신 러닝에 대해 알아보았다. 머신 러닝에는 크게 지도학습, 강화학습 그리고 비지도 학습이 있다는 것을 배웠는데 이 중에서 가장 많이 사용되는 방식이 지도 방식이라고 했다. 그래서 오늘은 수학 점수를 이용해서 과학 점수를 예측하는 인공지능을 예로, 기계가 어떻게 학습을 하는지에 대해 살펴보는 시간을 가져보겠다.
학생의 수학 점수를 입력하면 해당 데이터로 학습하여 학생의 과학 점수를 예측하는 모델을 만들 것이고, 해당 모델이 어떻게 데이터를 통해 학습을 하는지 구체적인 과정에 대해 살펴보자.
📢 해당 글은 지도학습에 대해 코드로 작성하는 실습보단, 이론 위주로 설명하고 있기 때문에 글을 읽기 전 참고 바란다.
모델 선택
기계 학습을 시작할 때 모델 선택은 중요한 단계 중 하나이다. 모델은 주어진 작업에 대해 어떤 유형의 학습 알고리즘을 사용할지를 결정하는데, 다양한 모델이 다양한 작업에 특화되어 있다.
모델이란, x란 입력값이 주어지면 y라는 값이 출력되는 함수를 의미한다. 지금은 위의 이미지처럼 간단하게 y = wx라고 표현하였지만, 인공지능에는 정말 다양한 모델들이 있다. 하지만 그중에서 쉽고 단순한 y = wx라는 1차 함수로 공부해 보자.
그래서 이번 시간에는 수학 점수(x)를 입력하면 과학 점수(y)를 예측하는 모델에 대해 살펴보며 공부해자. 그럼 해당 식에서 입력값인 x는 수학 점수이고 출력되는 y값은 과학 점수가 될 수 있겠다. 그리고 w는 가중치(Weight)를 나타낸다. 이 모델은 간단한 선형 회귀 모델로, 입력값 x에 가중치 w를 곱한 것이 출력값 y를 생성하는 형태이다. 가중치는 모델이 학습하는 과정에서 조절되어 입력값과 출력값 간의 관계를 나타낸다. 학습 과정에서 가중치가 조절되면서 모델은 데이터에 적합한 예측을 할 수 있도록 최적화된다.
📢 가중치가 무엇인지에 대해 좀 더 자세히 설명 가중치(Weight)는 기계 학습 및 신경망 모델에서 각 입력 피처(feature)에 할당되는 중요도를 나타내는 매개변수이다. 가중치는 모델이 학습하는 동안 조정되며, 입력 피처들이 출력에 어떻게 영향을 미치는지 결정한다. 선형 모델에서의 가중치는 각 입력 피처에 대해 곱해지는 계수이다. 위의 예제인 y = wx를 예로 들었을 때, y = w1x1 + w2x2 +... wnxn과 같은 다변수 선형 회귀 모델에서 각 wi는 해당 입력 xi에 대한 가중치는 나타낸다.
가중치의 역할은 입력 피처가 출력에 어떤 영향을 미치는지 결정하는 것이다. 가중치가 높을수록 해당 입력 피처는 출력에 더 큰 영향을 미치게 된다. 모델이 학습되면서 이러한 가중치는 입력과 출력 간의 관계를 학습하게 되며, 최적의 예측을 만들기 위해 조절된다. 가중치는 학습 알고리즘에 의해 데이터에 맞게 조절되는데, 이를 통해 모델은 주어진 입력에 대해 정확한 출력을 생성할 수 있도록 최적화된다.
데이터 수집
모델이 정해졌다면, 이제 데이터를 수집할 차례이다. 모델을 학습시키기 위해서는 충분한 양의 훈련 데이터가 필요하다. 훈련 데이터는 입력 데이터와 해당 데이터에 대한 정답(라벨 또는 타깃)으로 이루어져야 한다. 데이터를 수집할 때는 데이터의 품질과 다양성을 고려해야 한다.
수집된 데이터를 위의 이미지와 같이 표와 그래프 형태로 표현하였다. 위의 예시에서는 5개의 데이터밖에 없지만 실제로는 이보다 훨씬 많은 데이터가 필요하다. 하지만 편의를 위해 5개의 데이터만 표시하였다는 점을 참고 바란다.
그럼 위의 데이터를 한 번 살펴보자, 1번 학생의 경우 수학 점수(x)는 73점, 과학 점수(y)는 89점이다. 마찬가지로 2번 학생의 경우 수학 점수는 25점, 과학 점수는 43점이다. 지도학습은 훈련할 데이터와 정답을 같이 제공해줘야 하기 때문에, 지금 의 상황에선 수학 점수(x)가 훈련할 데이터이고, 과학 점수(y)가 모델이 예측해야 할 정답(라벨)인 것이다.
훈련
일반적으로 인공지능에서 모델을 훈련할 때 초기에 파라미터와 가중치는 랜덤으로 설정한다. 이것은 모델이 다양한 패턴을 학습할 수 있도록 도와주는 기술적인 선택이다.
가중치 초기화는 모델의 성능에 영향을 미칠 수 있으며, 적절한 초기화 방법을 선택하는 것이 중요하다. 널리 사용되는 초기화 방법 중 하나는 Xavier 또는 Glorot 초기화이다. 이 방법은 가중치를 평균이 0이고 분산이 특정 값이 되도록 랜덤 하게 초기화한다.
다른 초기화 방법으로는 He 초기화가 있다. 이 방법은 ReLU 활성화 함수와 함께 사용될 때 효과적이다. He 초기화는 가중치를 평균이 0이고 분산이 2배가 되도록 랜덤 하게 초기화한다.
초기화 방법은 모델의 성능과 학습 속도에 영향을 미칠 수 있으므로, 사용하는 모델과 데이터에 따라 적절한 초기화 방법을 선택하는 것이 좋다.
위에서 언급한 초기화 방법들은 아직 잘 몰라도 된다, 그저 "저런 것들이 있구나" 정도로만 참고하자. 오늘 학습할 예시에서는 위에서 언급한 초기화 방법들은 사용하지 않고 y = wx 부분에서 파라미터 부분인 w의 랜덤 값을 0.1이라고 가정해 보고 진행해 보겠다.
예측(Predict)
그렇다면 현재 w는 0.1이므로 위에서 정한 모델은 y = 0.1x와 같은 형태가 될 것이다. 훈련 단계에서 첫 번째로 수행하는 작업은 현재의 모델로 예측 값을 출력하는 것이다. 즉, x값에 5명의 수학점수인 73, 25, 18, 55, 66을 넣어 예상 과학점수를 출력한다.
y = 0.1x
No
x
y
ŷ
1
73
89
7.3
2
25
43
2.5
3
18
65
1.8
4
55
71
5.5
5
66
87
6.6
첫 번째 학생의 점수를 살펴보도록 하자. 수학점수 x는 73점이고, 예측된 과학점수는 y = 0.1x 이므로 7.3이 나왔다. 하지만 이 학생의 실제 과학 점수는 89점이므로, 예측된 과학 점수인 7.3점과는 무려 81.7점 차이가 난다. 이것은 아직 학습 초기 단계이기 때문에 당연한 결과이며, 이 차이를 점차 줄여갈 것이다. 참고로 예측된 y 값은 실제 y 값과 구분하기 위해 y-hat으로 주로 표현한다.
손실(Loss)
훈련 단계에서 다음으로 수행해야 할 작업은 손실을 계산하는 것이다. 여기서 손실이란 실제 y 값과 모델이 예측한 y 값의 차이를 의미한다. 방금 첫 번째 학생에 대해 살펴보았듯이 실제 과학 점수는 89점이지만, 예측 과학 점수는 7.3점이 나왔다. 따라서 첫 번째 학생의 손실 값은 81.7점이다. 따라서, 현재 첫 번째 학생의 경우 손실 값이 매우 큰 상태라고 할 수 있다. 또한 두 번째 학생의 경우도 과학 점수가 실제론 43점이지만, 예측 과학 점수는 2.5점으로 손실값이 큰 상태이다.
당연하겠지만, 손실 값이 큰 것은 좋은 것이 아니다. 따라서 모델의 학습 목적은 손실 값을 최소화시키는 것이다.
최적화(Optimization)
훈련 단계에서 세 번째로 수행해야 할 작업은 옵티미제이션이다. 옵티미제이션이란, 손실 값이 줄어들도록 파라미터를 업데이트하는 것이다. 해당 학습에서 우리는 파라미터 값을 0.1로 설정하였었다. 하지만 이번에는 0.3으로 수정이 되었다고 가정을 해보자.
y = 0.3x
No
x
y
ŷ
1
73
89
21.9
2
25
43
7.5
3
18
65
5.4
4
55
71
16.5
5
66
87
19.8
y-hat(예측 값)을 보면 파라미터가 0.1일 때보단 더 정답에 가까워진 것을 볼 수 있지만, 아직 정답에 근접하지는 않았다는 걸 확인할 수 있다. 일반적으로 모델은 학습할 때 한 번의 업데이트로 끝나지 않고 반복적이고 점진적으로 개선해 나간다. 따라서 앞선 훈련에서 수행한 예측값 계산, 손실 계산, 최적화를 반복해야 한다.
첫 번째 학생의 경우 파라미터가 0.1일 때 손실 값은 y(정답) - y-hat(예측 값)의 계산으로 81.7이었지만, 현재 파라미터를 0.3으로 예측을 하였을 땐 손실 값이 68.1로 줄어든 걸 확인할 수 있다. 하지만 아직 손실 값이 매우 크므로 더욱 작게 만들어야 할 필요가 있다.
따라서, 현재의 손실 값을 줄이기 위해 파라미터를 수정하는 최적화(옵티미제이션)를 수행해야 한다. 이렇게 Predict - Loss - Optimization의 과정을 반복하다 보면 손실 값이 계속 줄어들 게 될 것이고 정답에 근접할 것이다. 그리고 이 과정에서 손실 값을 줄이기 위해 w는 점차 업데이트되어 간다.
그리고 위의 과정을 계속 반복해가다 보면 어느 시점엔가 더 이상 손실 값이 줄어들지 않는 때가 온다. 이렇게 손실 값이 더 이상 줄어들지 않으면 훈련을 중단한다.
정리하자면, 이번 예제에서는 처음에 모델식을 y = wx로 놓았으며, 훈련을 통해 w값이 계속 업데이트하였다. 그리고 손실 값이 더 이상 줄어들지 않을 때의 w 값이 해당 모델의 최종식이 될 것이다. 예를 들어 w가 1.5일 때 손실 값이 더 이상 줄어들지 않았다면 해당 모델의 최종식은 y = 1.5x가 될 것이다.
마무리
결국 기계가 학습한다는 것의 의미는 모델에 있는 파라미터 및 가중치를 찾는 것이다. 여기서 파라미터란 함수식의 개수를 의미한다. 즉, 모델이 학습한다는 것은 결국 개수를 찾는 과정인 셈이다.
초기 모델은 형태만 있는 집과 같이 파라미터가 정해지지 않은 상태이지만, 학습을 통해 적절한 파라미터 값을 업데이트해 나아간다. 마치 집의 창문, 대문, 굴뚝과 같은 세부적인 요소들을 채워가는 것과 비슷하다고 할 수 있다.
이번 시간에 본 기계 학습의 예시에서는 y = wx라는 파라미터가 w 한 개뿐인 단순한 모델을 사용하였다. 하지만 최근에 나오는 모델들은 파라미터 개수가 매우 많고 복잡한 구조로 되어 있다. 현재 많은 인기를 얻고 있는 Chat GPT-3.5도 약 1,750억 개의 파라미터로 구성되어 있다. 이러한 초거대 인공지능 모델의 경우 대부분 딥러닝 분야에 해당된다.
하지만 파라미터의 개수가 1개이거나 1,750개이거나 학습하는 방법은 이번 시간에서 배운 예시와 크게 다르지는 않다. 단지 파라미터의 개수가 많을수록 앞에서 본 예시(y = wx)보단 각각의 파라미터에 대한 작업을 수행해야 하므로 더 많은 작업을 해야 할 뿐이다.
따라서, 학습할 때 많은 연산을 필요로 하며 고가의 컴퓨터 장비 없이는 모델을 학습시키는 것은 불가능하다.
마지막으로 이번 학습을 통해 배운 용어들을 정리하고 마무리하겠다.
keyword
meaning
Model
파라미터를 가진 함수
Parameter(weight)
모델 내부에 존재하며, 학습을 통해 찾아야 하는 변수
Loss
모델이 예측한 y값과 실제 y값의 차이 (Loss는 적을 수록 좋으며, Loss가 작아지도록 Parameter를 업데이트 해야 한다.)