머신러닝은 인공 지능의 하위 분야로 쉽게 말하면 컴퓨터에게 마법을 가르치는 것이라고 생각할 수 있습니다.
만약, 컴퓨터에게 음식 사진을 주고 어떤 음식인지 맞추보라고 한다고 가정해봅시다.
처음에는 전혀 모르겠지만, 여러 번의 시도를 거치면 컴퓨터는 데이터를 기반으로 어떤 음식인지 맞출 수 있게 됩니다.
이 과정을 계속 반복하면 컴퓨터는 더 많은 음식들을 인식할 수 있게 됩니다.
머신러닝은 이런 식으로 데이터를 통해 패턴을 학습하고 예측을 수행할 수 있는 수학적인 알고리즘과 통계학적 원리를 기반으로 동작합니다.
알고리즘은 쉽게 말하면 일종의 레시피와 비슷합니다.
컵라면을 끓이는 과정을 예를 들어보겠습니다. 컵라면을 먹기 위해서는 컵라면을 만들기 위한 단계들을 정확한 순서대로 따라야합니다. 컵라면 뚜껑을 반만 뜯고, 그 안의 스프와 후레이크를 꺼내고, 스프와 후레이크를 각각 뜯어서 내용물만 컵라면 안에 넣고, 뜨거운 물을 컵라면 안에 선에 맞춰 붓고, 반만 열린 뚜껑을 닫고 3분 가량 기다렸다가 먹습니다. 만약 컵라면 뚜껑을 반만 뜯는게 아니라 컵라면을 뜯게 된다면 먹을 수 없게 될 수도 있겠죠?
이렇게 알고리즘은 어떤 작업을 수행하기 위한 단계적인 계획이나 절차라고 생각할 수 있습니다.
어느 날, 수학자들은 간단한 문제를 다루기 시작했습니다. 커피와 시험 점수 사이의 관계를 연구한다고 가정하면, "커피 1잔씩 4잔을 마실 때까지 시험 점수가 약 10점씩 상승한다"는 선형 관계를 발견할 수 있었습니다. 이런 간단한 관계는 직선으로 나타낼 수 있었고, 수학자들은 이걸 공식화해서 "전날 마신 커피 잔 수에 따른 시험 점수"라는 알고리즘으로 만들고 싶었습니다. 그래서 score = 10 * coffee + 40
과 같은 공식을 만들게 되는데 이는 정확하지는 않았지만 추세를 예측하는데는 아주 큰 도움이 되었습니다.
그러나, 더 많은 실험을 진행하면서 수학자들은 더 복잡한 패턴을 발견했습니다. 어떤 사람들은 커피를 많이 마실수록 높은 점수를 받았지만, 다른 사람들은 그런 관계가 아니었습니다. 이것은 단순한 선형 관계로 설명하기 어려운 비선형적 관계였습니다. 이런 복잡한 관계들은 사람이 계산해서는 예측하기가 힘들었습니다. 그래서 수학자들과 과학자들은 생각했습니다. 직선 하나만 가지고는 풀 수 없는 문제가 있구나... 이런 문제를 컴퓨터가 풀게 할 수 있지 않을까?
이렇게 머신러닝이 생겨나게 되었고 머신러닝 중에서도 고차원의 비선형 문제를 잘 풀 수 있는 딥러닝 기술이 발전하기 시작했습니다.
요즘 들어 우리가 말하는 인공지능과 머신러닝이라고 하는 것은, 여러 방법 중에서 월등하게 성능이 좋은 딥러닝을 말합니다.
회귀 (Regression) : 어떤 값을 예측하거나 추정하는 문제에 주로 사용됩니다.
어떤 사람이 파전과 막걸리 장사를 한다고 가정해보겠습니다. 그 사람은 매일 날씨 데이터(기온, 습도, 강우량 등)와 그 날의 매출을 기록하고 있습니다. 이 데이터를 사용하여 날씨 예측 모델을 만들어보겠습니다.
모델은 각 날의 날씨 데이터를 입력으로 받고, 그 날의 매출을 예측합니다. 비가 오는 날에는 매출이 더 높을 것으로 예측할 것입니다. 또한 화창한 날은 매출이 낮을 것이라 예상할 것입니다. 이렇게 연속적인 값을 예측하는 것이 회귀 문제의 특징입니다.
분류 (Classification) : 주어진 데이터를 몇 가지 카테고리 중 하나로 분류하는 문제에 사용됩니다.
대학교 시험 전 날 공부한 시간을 가지고 해당 과목의 이수 여부(Pass or fail)를 예측하는 문제를 예로 들어보겠습니다. 이 문제에서 입력값은 [공부한 시간] 그리고 출력값은 [이수 여부]가 됩니다. 우리는 이수 여부를 0이면 미이수(Fail), 1이면 이수(Pass) 이런 식으로 0, 1 이라는 이진 클래스(Binary class)
로 나눌 수 있습니다.
대학교 시험 전 날 공부한 시간을 가지고 해당 과목의 성적(A, B, C, D, F)을 예측하는 문제의 경우 클래스를 5개의 클래스로 나누는 이 방법을 다중 분류(Multi-class classification, Multi-label classification)
라고 부릅니다.
이 두 가지 방법을 함께 활용하는 것도 가능합니다. 사람의 사진으로 나이를 예측하는 문제를 예로 들어보겠습니다. 사람 사진이 주어지면 데이터를 기반으로 그 사람의 나이를 예측하는 것은 회귀 방법이지만, 만약 나이를 범위로 쪼개어 클래스로 나눈다면 이것은 다중 분류 문제로 바꾸어서 풀 수 있게 되는 것이 됩니다.
지도 학습 : 정확한 정답을 제공받아 모델을 학습시키고, 새로운 데이터에 대한 예측을 수행하는 것
지도 학습은 기계에게 입력값과 출력값을 전부 보여주면서 학습시킵니다. 우리는 이미 정답을 알고 있기 때문에 정답을 잘 맞추었는지 아닌지를 쉽게 파악할 수 있습니다. 대신 정답(출력값)이 없으면 이 방법으로 학습시킬 수 없습니다. 혹은 입력값에 해당하는 데이터는 있어도 출력값(정답)에 해당하는 데이터가 없는 경우, 입력값에 정답을 하나씩 입력해주는 작업을 하게 되는 경우가 있는데 그 과정을 노가다 라벨링(Labeling, 레이블링) 또는 어노테이션(Annotation)이라고 합니다.
비지도 학습 : 데이터(정답 없이)를 이용하여 패턴을 찾는 것
수 많은 유튜브 채널들의 장르를 정하는 경우, 예전에 양세형&양세찬 유튜브 채널이 키즈 채널로 분류된 적이 있었죠? 이렇게 수 백만개의 채널들 중 장르에 대한 데이터가 없을 경우, 기계에게 채널의 영상들을 보여주고 알아서 비슷한 것끼리 분류하게 하는 것을 비지도 학습이라고 합니다.
강화 학습 : 주어진 데이터 없이 실행과 오류를 반복하면서 학습하는 방법. 대표적인 예로 알파고가 있습니다.
주어진 환경 내에서 행동을 선택하고 보상을 받으면서 학습을 진행하며, 점차 높은 보상을 얻기 위한 최적의 행동을 파악합니다. 즉, 시행착오를 통해 최적의 전략을 학습하는 방식이라고 볼 수 있습니다. 게임의 경우
게임의 규칙을 따로 입력하지 않고 자신(Agent)이 게임 환경(Environment)에서 현재 상태(State)에서 높은 점수(Reward)를 얻는 방법을 찾아가며 행동(Action)하는 학습 방법으로 특정 학습 횟수를 초과하면 높은 점수(Reward)를 획득할 수 있는 전략이 형성되게 됩니다. 강화 학습은 게임 AI, 자율 주행 자동차, 로봇 제어 등 다양한 응용 분야에서 사용됩니다.
가설 (Hypothesis) : 입력 변수(X)와 출력 변수(Y) 사이의 관계를 나타내는 함수입니다.
가설은 모델이 주어진 입력 변수를 기반으로 출력 변수를 예측하는 방법을 정의합니다. 선형 회귀에서 가장 일반적인 가설은 선형 방정식(H(x) = Wx + b)
으로 표현됩니다. W는 기울기(coefficient 또는 weight)이고, b는 y 절편(intercept 또는 bias)입니다. 이 함수를 사용하여 모델은 주어진 입력 변수(x)에 대해 예측 값을 계산합니다.
손실 함수 (Cost function 또는 Loss function) : 모델의 성능을 측정하고 모델이 예측한 값과 실제 값 사이의 오차를 나타내는 함수입니다.
선형 회귀에서 주로 사용되는 손실 함수는 평균 제곱 오차(Mean Squared Error, MSE)입니다. MSE는 예측 값과 실제 값 사이의 차이(오차)를 제곱하고 평균을 계산한 것입니다.
우리는 정확한 결과값을 예측하기 위해 우리가 만든 임의의 직선(가설)과 점(정답)의 거리가 가까워지도록 해야합니다. 이 거리가 최소가 되어야 이 모델이 잘 학습되었다고 말할 수 있습니다. = MSE(Mean Squared Error)
여기서 우리가 임의로 만든 직선 H(x)를 가설(Hypothesis)이라고 하고 Cost를 손실 함수(Cost or Loss function)라고 합니다.
다중 선형 회귀(Multi-variable linear regression) : 선형 회귀와 똑같지만 입력 변수가 여러 개입니다.
입력값이 2개 이상이 되는 문제를 선형 회귀로 풀고 싶을 때 다중 선형 회귀를 사용합니다.
경사 하강법은 손실 함수를 최소화하기 위한 핵심적인 최적화 알고리즘입니다. 우리의 목표는 손실 함수를 최소화하는 것이며, 이 손실 함수는 모델의 예측값과 실제 값 사이의 오차를 측정하는데 사용됩니다. 평균 제곱 오차(Mean Squared Error, MSE)는 일반적으로 사용되며, 이를 최소화하려고 노력합니다.
컴퓨터가 수식을 직접 풀지 못하므로 경사 하강법과 같은 최적화 알고리즘을 사용하여 문제를 풉니다. 이 알고리즘은 다음과 같이 동작합니다:
초기화: 먼저, 알고리즘은 임의의 파라미터 값에서 시작합니다. 이 시작 지점은 손실 함수의 표면에서 한 점을 나타냅니다.
학습률: 경사 하강법에서는 학습률(learning rate)을 정의합니다. 학습률은 한 번에 얼마나 크게 나아갈지 결정합니다. 즉, 파라미터를 업데이트할 때 이동하는 크기를 제어합니다.
기울기 계산: 현재 파라미터 위치에서 손실 함수의 기울기(그래디언트)를 계산합니다. 이것은 현재 위치에서 가장 가파르게 상승하는 방향을 나타냅니다.
업데이트: 현재 위치에서 기울기를 빼서 새로운 위치를 계산합니다. 학습률을 사용하여 얼마나 멀리 이동할지를 결정합니다.
종료 조건: 종료 조건을 확인하여 알고리즘을 계속할지 또는 종료할지를 결정합니다. 종료 조건은 일반적으로 일정한 반복 횟수를 나타내거나, 손실 함수 값이 더 이상 감소하지 않을 때로 설정됩니다.
반복: 위 단계를 반복하여 최소값을 찾을 때까지 알고리즘을 진행합니다.
경사 하강법은 손실 함수 곡면을 따라 내려가면서 최소값을 찾아가는 과정으로, 모델의 파라미터를 조정하여 데이터에 가장 잘 맞는 모델을 찾는 데 사용됩니다. 학습률과 종료 조건을 조절하여 최적의 모델을 찾을 수 있습니다.
우리가 만든 머신러닝 모델이 학습을 잘하기 위해서는 적당한 Learning rate를 찾는 노가다가 필수적입니다. 이를 올바르게 설정하지 않으면 학습 프로세스가 원활하게 진행되지 않을 수 있습니다.
위의 그래프에서 만약 Learning rate가 작다면 어떻게 될까요? 초기 위치로부터 최소점을 찾는데까지 많은 시간이 걸릴 것입니다. 모델은 매우 조금씩만 파라미터를 업데이트하므로 수렴하는 데 오랜 시간이 걸립니다. 즉 최소값에 수렴하기까지 많은 시간이 걸린다는 것을 뜻합니다.
반대로 만약 Learning rate가 지나치게 크다면요? 우리가 찾으려는 최소값을 지나치고 검은 점은 계속 진동하다가 최악의 경우에는 모델이 안정성을 잃고 수렴하지 않는 문제를 일으킬 수 있습니다. 이런 상황을 Overshooting이라고 부릅니다.
학습률을 설정할 때 여러 가지 값을 시도하고 검증 데이터를 사용하여 모델의 성능을 평가합니다. 적절한 학습률을 선택하면 모델은 효율적으로 수렴하고 최적의 파라미터 값을 찾을 수 있습니다.
학습 데이터 (Training Data) : 이것은 머신러닝 모델이 "교과서"와 같습니다. 머신러닝 모델을 학습시키는 용도로 사용하며, 모델은 학습 데이터를 통해 문제 해결 방법을 학습하고 예측 모델을 구축합니다. 일반적으로 전체 데이터셋 중 약 80%를 학습 데이터로 사용합니다.
Validation Set (검증 데이터셋) : 이 데이터셋은 모델의 성능을 "모의고사"와 같은 역할로 사용합니다. 검증 데이터에는 정답 라벨이 포함되어 있지만, 모델에 직접적으로 노출되지 않습니다. 대신, 손실 함수나 옵티마이저를 변경하면서 모델을 튜닝하고 성능을 검증하는 데 사용됩니다. 전체 데이터셋 중 약 20% 정도가 검증 데이터로 사용됩니다.
Test Set (평가 데이터셋) : 이 데이터셋은 모델의 "수능"과 같은 역할을 합니다. 테스트 데이터에는 정답 라벨이 없으며, 모델이 실제 환경에서 얼마나 잘 수행하는지 평가하기 위해 사용됩니다. 검증 데이터로 평가한 모델이 얼마나 잘 일반화되는지 확인하는 데 사용됩니다.
🥚🐣🐤🐥🐓🐔
전체적으로 정리가 잘되어있네요. 알에서 깨고 나와 병아리가 되었으니 닭이 되는 그날까지 화이팅🙌