수학자들은 이걸 공식화해서 "전날 마신 커피 잔 수에 따른 시험 점수"라는 알고리즘으로 만들기 위해 아래와 같이 식을 작성했다고 한다.
문제가 A보다 더 어려워졌다. 문제 A는 커피 잔 수만 고려하면 됐지만 이번에는 온도와 습도를 모두 고려해야 했기 때문에 결과를 예측하기 힘들다.
때문에 이런 복잡한 문제를 손쉽게 풀어내기 위해 머신러닝이 생겨나게 되었다!!!
이는 딥러닝으로 해결할 수 있다.
위의 사진을 보면 7잔 째의 데이터를 더하니 그래프도 이상해지고 수식도 이상해진다.
위의 문제처럼 직선 하나만 가지고는 풀 수 없는 문제가 있었기 때문에 사람들은 머신러닝을 연구하기 시작했다고 한다.
딥러닝은 머신러닝 방법 중 하나이다. 머신러닝(기계학습)이라는 포괄적인 범위 안에 딥러닝(Deep learning 깊은? 학습)이 포함되어 있다.
딥러닝은 머신러닝 중에서도 고차원의 비선형 문제를 잘 풀 수 있다.
Q. 사람의 얼굴 사진을 보고 몇 살인지 예측하는 문제
모든 문제를 풀기 위해서는 먼저 입력값(Input)과 출력값(Output)을 정의해야 한다. 이 문제에서 입력값은 [얼굴 사진]이 되고 출력값은 [예측한 나이]가 된다.
이 때 출력값인 나이를 소수점(float)로 표현하여 나타내면
위의 문제처럼 출력값이 연속적인 소수점으로 예측하게 하도록 푸는 방법을 회귀라고 한다.
비연속적인 문제를 풀 때 사용한다!
Q. 대학교 시험 전 날 공부한 시간을 가지고 해당 과목의 이수 여부(Pass or fail)를 예측하는 문제
이 문제에서 입력값은 [공부한 시간] 그리고 출력값은 [이수 여부]가 된다. 우리는 이수 여부를 0, 1 이라는 이진 클래스(Binary class)로 나눌 수 있다.(0이면 미이수(Fail), 1이면 이수(Pass))
이런 경우를 이진 분류(Binary classification)이라고 한다.
Q. 대학교 시험 전 날 공부한 시간을 가지고 해당 과목의 성적(A, B, C, D, F)을 예측하는 문제
클래스를 5개의 클래스로 나누고 이 방법을 다중 분류(Multi-class classification, Multi-label classification)라고 부른다.
Q. 사람의 얼굴 사진을 보고 몇 살인지 예측하는 문제
나이를 범위로 쪼개어 생각해보자!!
나이 범위에 따른 클래스로 나누어서 생각할 수 있다. 이렇게 되면 다중 분류 문제로 바꾸어서 풀 수 있게 된다!!
❗ 문제를 정의할 때 입력과 출력값을 미리 정의를 한 후 문제를 접근하면 편하다!
지도 학습(Supervised learning)이란 정답을 알려주면서 학습시키는 방법이다.
<사과를 인식하게 하기>
입력값-> 사과 사진
아웃풋값-> 사과라고 명명된 라벨들
이런 텍스트 데이터들이 필요한데 없는경우가 많아 하나하나 사진을 보며 사과라고 표시를 해주는 작업들을 해줘야 한다.
-> 이를 레이블링(라벨링), 어노테이션이라고 한다.(정답을 표시해주는 작업)
위에서 배웠던 회귀와 분류 문제가 대표적인 지도 학습에 속한다.
지도 학습은 기계에게 입력값과 출력값을 전부 보여주면서 학습시킨다.
대신 정답(출력값)이 없으면 이 방법으로 학습시킬 수 없다.
따라서 입력값에 정답을 하나씩 입력해주는 작업을 하게 되는 경우가 있는데 그 과정을 노가다 라벨링(Labeling, 레이블링) 또는 어노테이션(Annotation)이라고 한다.
비지도 학습 (Unsupervised learning)이란 정답을 알려주지 않고 군집화(Clustering)하는 방법이다.
비지도 학습은 그룹핑 알고리즘(Grouping algorithm)의 성격을 띄고 있다.
예) 음원 파일을 분석하여 장르를 팝, 락, 클래식, 댄스로 나누는 문제
우리가 가지고 있는 데이터에 입력값(음원파일)과 출력값(장르) 둘 다 존재한다면 우리는 지도 학습으로 이 문제를 풀 수 있지만 출력값에 해당하는 장르 데이터가 없을 때 비지도 학습 방법을 사용한다.
비지도 학습 방법은 라벨(Label 또는 Class)이 없는 데이터를 가지고 문제를 풀어야 할 때 큰 힘을 발휘하는데 음악 장르를 구분하는 문제를 비지도 학습을 사용해서 풀라고 시키면 "우리에게는 수 백만개의 음원 파일이 있는데, 각 음원 파일에 대한 장르 데이터는 없어. 그러니까 기계에게 음원 파일을 들려주고 알아서 비슷한 것끼리 분류하게 해보자!"
라는것과 같다.
위의 예시작업에서 기계가 분류를 끝마치면 사람은 분류된 것에 명칭만 입력해주면 된다.
강화 학습(Reinforcement learning)이란 주어진 데이터없이 실행과 오류를 반복하면서 학습하는 방법이다. (알파고를 탄생시킨 머신러닝 방법!!)
이는 행동 심리학에서 나온 이론으로 분류할 수 있는 데이터가 존재하지 않거나, 데이터가 있어도 정답이 따로 정해져 있지 않고, 자신이 한 행동에 대해 보상(Reward)를 받으며 학습하는 것을 말한다.
각각의 경우를 다 실행해보면서 좋은 행동을 했을 때 보상을 많이주고 좋지 않은 행동들 했을 때 보상을 적게준다.
보상은 숫자로 준다. 좋으면 10점 안좋으면 1점, 마이너스 보상을 줄 수 도 있다.(이상한 행동을 하면)
- 강화학습의 개념
- 에이전트(Agent)
- 환경(Environment)
- 상태(State)
- 행동(Action)
- 보상(Reward)
예) 게임
게임의 규칙을 따로 입력하지 않고 자신(Agent)이 게임 환경(Environment)에서 현재 상태(State)에서 높은 점수(Reward)를 얻는 방법을 찾아가며 행동(Action)하는 학습 방법으로 특정 학습 횟수를 초과하면 높은 점수(Reward)를 획득할 수 있는 전략이 형성되게 된다.
단, 행동(Action)을 위한 행동 목록(방향키, 버튼)등은 사전에 정의가 되어야 한다.
❓ 만약 강화학습 대신 지도학습을 사용한다면?
만약 이것을 지도 학습(Supervised Learning)의 분류(Classification)를 통해 학습을 한다고 가정하면 모든 상황에 대해 어떠한 행동을 해야 하는지 모든 상황을 예측하고 답을 설정해야 하기 때문에 상상할 수도 없이 엄청난 데이터가 필요하다.
회귀문제를 선형적으로 어떤 그래프에서 직선 하나만을 그려서 예측할 수 있는 방법이다.(간단하지만 강력!)
->이세상의 모든 법칙은 선형적이다라고 가정을 하고 문제에 접근하기 때문
머신러닝의 모든 문제는 가설이 있어야만 풀 수 있다. 가설을 사람이 정해주고 가설에 맞춰서 머신이 문제를 풀도록 학습시킨다.
가설 :
데이터 셋 : 커피 잔 수에 따른 시험 점수 자료
입력값 : 커피잔 수
출력값 & 정답값 : 시험 점수
점선 : 선형 회귀로 예측한 값
cost function : 점과 직선의 거리
mean squared error : 직선과 정답의 거리
우리는 임의의 직선 1개로 이 그래프를 비슷하게 표현할 수 있다고 가설을 세울 수 있다.
이를 수식으로 표현하면
우리는 정확한 시험 점수를 예측하기 위해 우리가 만든 임의의 직선(가설)과 점(정답)의 거리가 가까워지도록 해야한다. (=mean squared error)
-> 이를 위해 cost function(손실함수)를 사용
여기서 H(x)는 우리가 가정한 직선이고 y 는 정답 포인트라고 했을 때 H(x)와 y의 거리(또는 차의 절대값)가 최소가 되어야 이 모델이 잘 학습되었다라고 할 수 있다.
여기서 우리가 임의로 만든 직선 H(x)를 가설(Hypothesis)이라고 하고 Cost를 손실 함수(Cost or Loss function)라고 한다.
- 우리가 할 일 -> 가설을 세우고 손실함수를 정의하는 것, 어떤 가설이 좋은지 어떤 손실함수가 좋은지는 여러번의 반복 실험을 통해 찾아가는 것
- 우리가 가설에서 알아내야 할 것은 w와 b 값, w와 b값을 바꿔가면서 넣으면서 손실함수가 낮아지는 값을 찾으라고 기계한테 시키기
w = weight(행렬 형태)
b = bias(행렬 형태)
앞으로의 머신러닝이나 딥러닝의 기본구조는 항상 선형(1차함수)에서 시작한다!!
선형 회귀와 똑같지만 입력 변수가 여러개라고 생각하면 된다.
아래는 입력 변수가 커피 잔 수와 게임 플레이 시간으로 2개이다.
변수만 많아진것일 뿐 어쨌든 직선은 하나이고 정답값의 거리를 계산하는 것은 똑같다!!
가설
손실 함수
w와 b의 값을 바꿔가면서 손실함수가 내려가는지 안내려갔는지 확인하며 조금씩 내려가보면서 원하는 값을 찾아가는 방법이다.
learning rate의 크기에 따라 학습 시간이 결정된다.
우리의 목표는 손실 함수를 최소화(Optimize)하는 것! 손실 함수를 최소화하는 방법은 이 그래프를 따라 점점 아래로 내려가야한다.
컴퓨터는 사람처럼 수식을 풀 수 없기때문에 경사 하강법이라는 방법을 써서 점진적으로 문제를 풀어간다.
- 처음에 랜덤으로 한 점으로부터 시작
- 좌우로 조금씩 그리고 한번씩 움직이면서 이전 값보다 작아지는지를 관찰
여기서 한칸씩 전진하는 단위를 Learning rate라고 부른다.- 그래프의 최소점에 도달하게 되면 학습을 종료
우리가 만든 머신러닝 모델이 학습을 잘하기 위해서는 적당한 Learning rate를 찾는 노가다가 필수적이다.
- learning rate가 작을 경우
초기 위치로부터 최소점을 찾는데까지 많은 시간이 걸린다.
그리고 이 것은 학습하는데, 즉 최소값에 수렴하기까지 많은 시간이 걸린다는 것을 뜻한다.
- learning rate가 클 경우
우리가 찾으려는 최소값을 지나치고 검은 점은 계속 진동하다가 최악의 경우에는 발산하게 될 수도 있다. 이런 상황을 Overshooting이라고 부른다.
간단한 선형 회귀 문제의 경우는 그래프를 그릴 수는 있지만 복잡한 가설을 세울 경우에는 사람이 그릴 수도 없고 상상할 수 없는 형태가 된다.
예를 들어 간단하게 아래와 같은 그래프를 상상해보자.
우리의 목표는 이 손실 함수의 최소점인 Global cost minimum을 찾는 것이다.
그런데 우리가 한 칸씩 움직이는 스텝(Learning rate)를 잘못 설정할 경우 Local cost minimum에 빠질 가능성이 높다.
Cost가 높다는 얘기는 우리가 만든 모델의 정확도가 낮다는 말과 같다. 따라서 우리는 최대한 Global minimum을 찾기 위해 좋은 가설과 좋은 손실 함수를 만들어서 기계가 잘 학습할 수 있도록 만들어야하고 그것이 바로 머신러닝 엔지니어의 핵심 역할이다!
머신러닝 모델을 학습시키는 용도로 사용하고, 전체 데이터셋의 약 80% 정도를 차지한다.
머신러닝 모델의 성능을 검증하고 튜닝하는 지표의 용도로 사용한다. 이 데이터는 정답 라벨이 있고, 학습 단계에서 사용하기는 하지만, 모델에게 데이터를 직접 보여주지는 않으므로 모델의 성능에 영향을 미치지는 않는다.
손실 함수, Optimizer 등을 바꾸면서 모델을 검증하는 용도로 사용하고, 전체 데이터셋의 약 20% 정도를 차지합니다.
정답 라벨이 없는 실제 환경에서의 평가 데이터셋이다. 검증 데이터셋으로 평가된 모델이 아무리 정확도가 높더라도 사용자가 사용하는 제품에서 제대로 동작하지 않을 수 있기 때문에 확인 필수