대단원 5. 인공지능 맛보기: 선형회귀와 경사하강법 🤖 인공지능, 예측의 마법을 맛보다!
드디어 대단원 5, "인공지능 맛보기: 선형회귀와 경사하강법"에 오신 것을 환영합니다! 🥳 지금까지 갈고닦은 선형대수 실력을 발휘하여, 인공지능의 가장 기본적인 형태이지만 핵심 원리를 담고 있는 선형회귀 (Linear Regression) 를 직접 배우고, 경사하강법 (Gradient Descent)이라는 최적화 알고리즘을 통해 인공지능 학습의 기본 과정을 경험해 볼 것입니다. 마치 요리사가 되기 위한 첫 실습처럼, 선형회귀와 경사하강법은 인공지능이라는 거대한 세계를 탐험하는 첫걸음이 될 것입니다. 자, 예측의 즐거움과 학습의 신비로움이 가득한 인공지능의 세계로 함께 떠나볼까요? 🚀
5.1 선형회귀 기본 개념
5.1.1 예측하는 재미, 선형회귀 (The Fun of Prediction, Linear Regression)
선형회귀, 예측은 어떻게 하는 걸까? 🤔
선형회귀 (Linear Regression)는 주어진 데이터들을 이용하여 변수 사이의 관계를 모델링하고, 이를 통해 새로운 값을 예측하는 방법입니다. 쉽게 말해, 과거 데이터를 분석하여 미래를 예측하는 예측 마법🧙♂️과 같습니다! 선형회귀는 예측 모델 중 가장 간단하면서도 강력한 방법 중 하나이며, 다양한 분야에서 널리 활용됩니다.
예측 시나리오: 집 값 예측, 광고 효과 예측, 학생 성적 예측... 무엇을 예측해 볼까? 🔮
선형회귀는 우리 주변의 다양한 현상을 예측하는 데 활용될 수 있습니다. 몇 가지 재미있는 예측 시나리오를 살펴볼까요? 마치 미래를 보는 수정 구슬🔮처럼, 선형회귀는 예측의 가능성을 제시합니다.
- 집 값 예측: 집 크기, 위치, 건축 연도 등의 정보를 이용하여 집 값을 예측할 수 있습니다. 부동산 시장의 미래를 예측해보는 것은 흥미로운 도전이 될 수 있습니다. 🏠
- 광고 효과 예측: 광고 예산, 광고 매체, 광고 기간 등의 정보를 이용하여 광고 클릭 수나 매출 증가량을 예측할 수 있습니다. 효율적인 광고 전략 수립에 도움이 될 수 있겠죠? 📈
- 학생 성적 예측: 학생의 공부 시간, IQ, 이전 시험 점수 등의 정보를 이용하여 다음 시험 성적을 예측할 수 있습니다. 학생 맞춤형 학습 전략을 제시하거나, 학업 성취도를 미리 가늠해 볼 수 있습니다. ✍️
- 주가 예측: 과거 주가 데이터, 경제 지표, 기업 실적 등을 이용하여 미래 주가를 예측할 수 있습니다. 주식 투자에 활용할 수도 있겠지만, 예측은 항상 불확실성을 내포하고 있다는 점을 명심해야 합니다! 💰
- 날씨 예측: 과거 날씨 데이터, 기압, 온도, 습도 등을 이용하여 내일 날씨를 예측할 수 있습니다. 정확한 날씨 예측은 우리 생활에 큰 편리함을 제공합니다. ☀️☁️🌧️
선형회귀 모델: 직선으로 관계를 표현한다! 📏
선형회귀 모델은 변수 사이의 관계를 직선으로 가정합니다. 가장 단순하면서도 직관적인 형태이죠! 마치 자📏를 이용하여 데이터를 꿰뚫는 직선을 그리는 것과 같습니다. 하나의 독립 변수 (independent variable) x 와 하나의 종속 변수 (dependent variable) y 사이의 관계를 모델링하는 단순 선형회귀 (Simple Linear Regression) 모델은 다음과 같은 직선 방정식으로 표현됩니다.
$ y = wx + b $
- y: 예측하고자 하는 값, 종속 변수 (dependent variable) 또는 출력 변수 (output variable)라고 부릅니다. (예: 집 값, 광고 클릭 수, 학생 성적)
- x: 예측에 활용하는 정보, 독립 변수 (independent variable) 또는 입력 변수 (input variable) 또는 특징 (feature) 이라고 부릅니다. (예: 집 크기, 광고 예산, 공부 시간)
- w: 가중치 (weight) 또는 계수 (coefficient) 라고 부르며, 독립 변수 x 가 종속 변수 y에 미치는 영향력을 나타냅니다. 직선의 기울기를 결정합니다.
- b: 편향 (bias) 또는 절편 (intercept) 이라고 부르며, 독립 변수가 0 일 때 종속 변수의 값을 나타냅니다. 직선의 y절편을 결정합니다.
선형회귀 모델은 가중치 w와 편향 b라는 두 개의 파라미터를 학습하여 데이터를 가장 잘 설명하는 직선을 찾는 것을 목표로 합니다. 마치 연필✏️로 그래프 위에 가장 적절한 직선을 그리는 것과 같습니다.
선형회귀 예측 과정: 직선 모델로 예측하기! 🚀
- 데이터 준비: 예측에 사용할 학습 데이터 (training data)를 준비합니다. 학습 데이터는 과거의 입력 변수 x와 출력 변수 y의 쌍으로 구성됩니다. (예: 과거 집 크기 - 집 값 데이터)
- 모델 학습: 학습 데이터를 이용하여 선형회귀 모델의 최적 파라미터 (w, b) 를 찾습니다. 비용 함수 (cost function)와 경사하강법 (gradient descent)이라는 알고리즘을 이용하여 최적 파라미터를 학습합니다. (다음 섹션에서 자세히 다룹니다.)
- 예측: 학습된 선형회귀 모델에 새로운 입력 변수 x를 입력하면, 모델은 예측된 출력 변수 y 값을 반환합니다. (예: 새로운 집 크기를 입력하면 예측된 집 값을 출력)
선형회귀, 왜 선형일까? 직선 관계 가정! 📏
선형회귀 모델이 "선형"이라는 이름을 갖는 이유는, 변수 사이의 관계를 직선 (linear) 으로 가정하기 때문입니다. 직선은 수학적으로 가장 단순한 형태의 함수이며, 해석하기 쉽고 계산하기도 간편합니다. 물론 실제 세계의 모든 관계가 직선으로 표현될 수 있는 것은 아니지만, 많은 경우에 선형 근사 (linear approximation)가 유용하며, 특히 복잡한 모델의 기초가 됩니다. 마치 단순한 직선이 건물을 짓는 기본 뼈대🧱가 되는 것처럼, 선형회귀는 더 복잡한 인공지능 모델의 기본 building block 역할을 합니다.
5.1.2 오차를 줄이는 비법, 비용 함수 (The Secret to Reducing Errors, Cost Function)
모델 학습, 오차를 최소화해야 한다! 오차는 줄이고, 정확도는 높이고! 🎯
선형회귀 모델 학습의 핵심은, 학습 데이터와 모델 예측 값 사이의 오차 (error)를 최소화하는 최적의 파라미터 (w, b)를 찾는 것입니다. 오차가 작을수록 모델이 데이터를 더 잘 설명하고, 예측 정확도가 높아집니다. 마치 과녁🎯에 화살을 쏘듯이, 오차를 줄이는 것은 과녁의 중심에 화살을 최대한 가깝게 맞히는 것과 같습니다.
비용 함수: 오차를 숫자로 표현하는 방법 📉
비용 함수 (Cost Function) 또는 손실 함수 (Loss Function) 는 모델의 오차를 수치화하는 함수입니다. 비용 함수는 모델 예측 값과 실제 값 사이의 차이를 계산하여 하나의 숫자로 나타냅니다. 선형회귀 모델에서는 주로 평균 제곱 오차 (Mean Squared Error, MSE)를 비용 함수로 사용합니다. 비용 함수는 모델의 성능을 평가하는 기준과 같습니다.
평균 제곱 오차 (MSE) 공식: 제곱, 평균, 오차! 📐
MSE 비용 함수는 다음과 같이 정의됩니다.
$ MSE(w, b) = \frac {1}{N} \sum_{i=1}^{N} (y_i - \hat {y} i)^2 = \frac {1}{N} \sum {i=1}^{N} (y_i - (wx_i + b))^2 $
- : 학습 데이터의 개수
- : 번째 학습 데이터의 입력 변수
- : 번째 학습 데이터의 실제 출력 변수 (정답)
- : 선형회귀 모델이 예측한 번째 출력 변수 값
- : 번째 데이터에 대한 오차의 제곱 (squared error). 오차를 제곱하는 이유는:
- 오차의 부호 (양수 또는 음수) 에 상관없이 오차 크기를 반영하기 위해
- 미분 가능한 함수로 만들어 최적화 알고리즘 (경사하강법) 을 적용하기 용이하게 하기 위해
- : 모든 학습 데이터에 대한 오차 제곱의 평균 (mean squared error). 평균을 취하는 이유는:
- 데이터 개수에 상관없이 오차 크기를 일관성 있게 평가하기 위해
MSE 비용 함수는 모델 예측 값 가 실제 값 로부터 얼마나 떨어져 있는지 제곱 거리의 평균으로 나타냅니다. MSE 값이 작을수록 모델의 예측 성능이 좋다고 평가할 수 있습니다. 비용 함수는 모델이 얼마나 '못' 하고 있는지 나타내는 지표라고 생각하면 됩니다. (비용이 크면 모델 성능이 나쁨)
비용 함수 시각화: 파라미터에 따른 비용 함수 값 변화! 📉📈
비용 함수 MSE는 파라미터 (w, b) 에 대한 함수입니다. 파라미터 값이 변함에 따라 비용 함수 값도 변합니다. 일반적으로 비용 함수는 볼록 함수 (convex function) 형태를 띠며, 최소값을 갖는 파라미터 조합이 존재합니다. 우리의 목표는 비용 함수를 최소화하는 파라미터 (w, b) 를 찾는 것입니다. 마치 산⛰️에서 가장 낮은 골짜기 valley 를 찾아 내려가는 것과 같습니다.
5.2 경사하강법 (Gradient Descent) ⛰️ 최적의 길을 찾아서, 경사하강법의 마법!
자, 드디어 인공지능 학습의 핵심 알고리즘, 경사하강법 (Gradient Descent) 을 배울 시간입니다! 🥳 경사하강법은 비용 함수 (Cost Function) 를 최소화하는 최적의 파라미터 (w, b) 를 찾는 마법 같은 알고리즘🧙♀️입니다. 마치 산⛰️에서 가장 낮은 골짜기를 향해 한 걸음씩 내려가는 것과 같습니다. 경사하강법은 선형회귀 모델뿐만 아니라, 딥러닝을 포함한 대부분의 인공지능 모델 학습에 사용되는 핵심 최적화 기법입니다. 경사하강법의 원리를 이해하면, 인공지능 학습의 자동화와 최적화 과정을 꿰뚫어 볼 수 있게 될 것입니다. 자, 최적의 길을 찾는 경사하강법의 여정을 함께 시작해볼까요? 🚀
5.2.1 최적의 길을 찾아서, 경사하강법 원리 (Finding the Optimal Path, Principle of Gradient Descent)
경사하강법, 왜 필요할까? 최적 파라미터를 자동으로 찾아주는 마법! ✨
우리가 선형회귀 모델을 학습하는 목표는 비용 함수 MSE 를 최소화하는 최적의 가중치 w 와 편향 b 를 찾는 것입니다. 비용 함수는 파라미터 (w, b) 에 대한 복잡한 함수 형태를 띄고 있기 때문에, 수학적으로 직접 최소값을 구하는 것은 매우 어렵거나 불가능합니다. 마치 험준한 산⛰️에서 지도 없이 가장 낮은 곳을 찾는 것처럼, 최적 파라미터를 직접 찾는 것은 막막할 수 있습니다.
이러한 어려움을 해결해주는 것이 바로 경사하강법 (Gradient Descent) 입니다. 경사하강법은 미분 (gradient) 정보를 이용하여 비용 함수를 점진적으로 감소시키는 방향으로 파라미터를 반복적으로 업데이트하여 최적 파라미터에 근사하는 반복적인 최적화 알고리즘입니다. 마치 GPS 🧭 네비게이션처럼, 경사하강법은 현재 위치에서 가장 경사가 급한 방향 (내리막길) 을 따라 조금씩 이동하면서 목적지 (최저점) 에 도달하는 방법과 유사합니다.
경사하강법 작동 방식: 미분, 경사, 업데이트, 반복! 🔄
경사하강법의 작동 방식은 다음과 같습니다. 마치 등산가가 산을 내려가는 과정과 비슷하게 생각할 수 있습니다.
- 초기 파라미터 설정: 가중치 w 와 편향 b 를 임의의 값으로 초기화합니다. 시작점을 어디로 할지 정하는 것과 같습니다. (예: w = 0, b = 0 또는 랜덤 값)
- 미분 (Gradient) 계산: 현재 파라미터 (w, b) 에서 비용 함수 MSE 의 각 파라미터에 대한 편미분 값 (gradient) 을 계산합니다. 편미분 값은 현재 위치에서 비용 함수가 가장 가파르게 증가하는 방향을 나타냅니다. 마치 현재 위치에서 가장 가파른 오르막길 방향을 찾는 것과 같습니다.
- 파라미터 업데이트: 계산된 편미분 값의 반대 방향 (비용 함수가 가장 가파르게 감소하는 방향, 즉 내리막길) 으로 파라미터를 조금씩 업데이트합니다. 업데이트 양을 조절하는 학습률 (learning rate) α 를 사용합니다. 마치 내리막길 방향으로 일정 거리만큼 발을 내딛는 것과 같습니다.
- $ w_{new} = w_{old} - \alpha \frac{\partial}{\partial w} MSE(w_{old}, b_{old}) $
- $ b_{new} = b_{old} - \alpha \frac{\partial}{\partial b} MSE(w_{old}, b_{old}) $
- 반복: 2번, 3번 단계를 충분히 많이 반복합니다. 반복 횟수가 많아질수록 파라미터 (w, b) 는 비용 함수가 최소화되는 지점 (최저점) 에 점점 더 가까워집니다. 마치 산 정상에서 출발하여 계속해서 내리막길을 따라 내려가다 보면 결국 골짜기에 도달하는 것과 같습니다.
- 최적 파라미터: 반복을 멈추고, 최종적으로 얻어진 파라미터 (w, b) 를 최적 파라미터로 간주합니다. 골짜기에 거의 다 내려왔다고 판단되면 멈추는 것과 같습니다. (정해진 반복 횟수만큼 반복하거나, 비용 함수 변화량이 충분히 작아지면 반복을 멈춥니다.)
5.2 경사하강법 (Gradient Descent) ⛰️ 최적의 길을 찾아서, 경사하강법의 마법!
자, 드디어 인공지능 학습의 핵심 알고리즘, 경사하강법 (Gradient Descent) 을 배울 시간입니다! 🥳 경사하강법은 비용 함수 (Cost Function) 를 최소화하는 최적의 파라미터 (w, b) 를 찾는 마법 같은 알고리즘🧙♀️입니다. 마치 산⛰️에서 가장 낮은 골짜기를 향해 한 걸음씩 내려가는 것과 같습니다. 경사하강법은 선형회귀 모델뿐만 아니라, 딥러닝을 포함한 대부분의 인공지능 모델 학습에 사용되는 핵심 최적화 기법입니다. 경사하강법의 원리를 이해하면, 인공지능 학습의 자동화와 최적화 과정을 꿰뚫어 볼 수 있게 될 것입니다. 자, 최적의 길을 찾는 경사하강법의 여정을 함께 시작해볼까요? 🚀
5.2.1 최적의 길을 찾아서, 경사하강법 원리 (Finding the Optimal Path, Principle of Gradient Descent)
경사하강법, 왜 필요할까? 최적 파라미터를 자동으로 찾아주는 마법! ✨
우리가 선형회귀 모델을 학습하는 목표는 비용 함수 MSE 를 최소화하는 최적의 가중치 w 와 편향 b 를 찾는 것입니다. 비용 함수는 파라미터 (w, b) 에 대한 복잡한 함수 형태를 띄고 있기 때문에, 수학적으로 직접 최소값을 구하는 것은 매우 어렵거나 불가능합니다. 마치 험준한 산⛰️에서 지도 없이 가장 낮은 곳을 찾는 것처럼, 최적 파라미터를 직접 찾는 것은 막막할 수 있습니다.
이러한 어려움을 해결해주는 것이 바로 경사하강법 (Gradient Descent) 입니다. 경사하강법은 미분 (gradient) 정보를 이용하여 비용 함수를 점진적으로 감소시키는 방향으로 파라미터를 반복적으로 업데이트하여 최적 파라미터에 근사하는 반복적인 최적화 알고리즘입니다. 마치 GPS 🧭 네비게이션처럼, 경사하강법은 현재 위치에서 가장 경사가 급한 방향 (내리막길) 을 따라 조금씩 이동하면서 목적지 (최저점) 에 도달하는 방법과 유사합니다.
경사하강법 작동 방식: 미분, 경사, 업데이트, 반복! 🔄
경사하강법의 작동 방식은 다음과 같습니다. 마치 등산가가 산을 내려가는 과정과 비슷하게 생각할 수 있습니다.
- 초기 파라미터 설정: 가중치 w 와 편향 b 를 임의의 값으로 초기화합니다. 시작점을 어디로 할지 정하는 것과 같습니다. (예: w = 0, b = 0 또는 랜덤 값)
- 미분 (Gradient) 계산: 현재 파라미터 (w, b) 에서 비용 함수 MSE 의 각 파라미터에 대한 편미분 값 (gradient) 을 계산합니다. 편미분 값은 현재 위치에서 비용 함수가 가장 가파르게 증가하는 방향을 나타냅니다. 마치 현재 위치에서 가장 가파른 오르막길 방향을 찾는 것과 같습니다.
- 파라미터 업데이트: 계산된 편미분 값의 반대 방향 (비용 함수가 가장 가파르게 감소하는 방향, 즉 내리막길) 으로 파라미터를 조금씩 업데이트합니다. 업데이트 양을 조절하는 학습률 (learning rate) α 를 사용합니다. 마치 내리막길 방향으로 일정 거리만큼 발을 내딛는 것과 같습니다.
- $ w_{new} = w_{old} - \alpha \frac{\partial}{\partial w} MSE(w_{old}, b_{old}) $
- $ b_{new} = b_{old} - \alpha \frac{\partial}{\partial b} MSE(w_{old}, b_{old}) $
- 반복: 2번, 3번 단계를 충분히 많이 반복합니다. 반복 횟수가 많아질수록 파라미터 (w, b) 는 비용 함수가 최소화되는 지점 (최저점) 에 점점 더 가까워집니다. 마치 산 정상에서 출발하여 계속해서 내리막길을 따라 내려가다 보면 결국 골짜기에 도달하는 것과 같습니다.
- 최적 파라미터: 반복을 멈추고, 최종적으로 얻어진 파라미터 (w, b) 를 최적 파라미터로 간주합니다. 골짜기에 거의 다 내려왔다고 판단되면 멈추는 것과 같습니다. (정해진 반복 횟수만큼 반복하거나, 비용 함수 변화량이 충분히 작아지면 반복을 멈춥니다.)
경사하강법, 왜 "경사"를 "하강"할까? 내리막길 따라 최저점을 향해! 📉
경사하강법은 이름 그대로, 비용 함수의 경사 (gradient) 를 이용하여 가장 가파른 내리막길 방향으로 파라미터를 업데이트하는 방법입니다. "경사" 는 미분 값을 의미하며, 현재 위치에서 함수 값이 가장 빠르게 증가하는 방향을 나타냅니다. 경사하강법은 경사의 반대 방향으로 이동해야 함수 값이 가장 빠르게 감소한다는 원리를 이용합니다. 마치 물이 높은 곳에서 낮은 곳으로 흐르는 것처럼, 경사하강법은 비용 함수 값을 높은 곳에서 낮은 곳으로 흘러가도록 유도합니다.
학습률 (Learning Rate) α: 한 걸음의 크기를 결정하는 중요한 파라미터! 👣
학습률 (learning rate) α 는 경사하강법에서 파라미터를 얼마나 크게 업데이트할지 결정하는 중요한 하이퍼파라미터 (hyperparameter) 입니다. 학습률 값에 따라 학습 속도와 성능이 크게 달라질 수 있습니다. 마치 내리막길을 걸을 때 보폭 크기를 결정하는 것과 같습니다.
- 학습률이 너무 큰 경우: 파라미터 업데이트가 너무 크게 이루어져서, 최저점을 지나쳐 버리거나 (overshooting), 진동하면서 수렴하지 못하고 발산할 수 있습니다. 마치 내리막길을 너무 성큼성큼 걷다가 넘어지거나, 골짜기를 지나쳐 반대편 산으로 올라가 버리는 것과 같습니다.
- 학습률이 너무 작은 경우: 파라미터 업데이트가 너무 작게 이루어져서, 최저점에 수렴하는 데 시간이 너무 오래 걸리거나, 지역 최적점 (local minimum) 에 갇혀 전역 최적점 (global minimum) 에 도달하지 못할 수 있습니다. 마치 내리막길을 너무 찔끔찔끔 걸어서 골짜기에 너무 늦게 도착하거나, 작은 웅덩이에 빠져서 더 낮은 골짜기로 나아가지 못하는 것과 같습니다.
- 적절한 학습률: 학습률을 적절하게 조절해야 경사하강법이 안정적으로 수렴하고, 최적 파라미터를 효율적으로 찾을 수 있습니다. 적절한 학습률 값은 문제와 데이터에 따라 다르며, 다양한 실험을 통해 경험적으로 찾아야 합니다. 마치 자신에게 맞는 보폭 크기를 찾아야 효율적으로 산을 내려갈 수 있는 것처럼, 적절한 학습률을 찾는 것이 중요합니다.
경사하강법 종류: 다양한 경사하강법 알고리즘! 👨👩👧👦
경사하강법은 다양한 변종 알고리즘들이 존재합니다. 각 알고리즘은 장단점이 있으며, 문제 특성에 따라 적절한 알고리즘을 선택해야 합니다. 마치 등산로가 여러 갈래로 나뉘어져 있는 것처럼, 경사하강법도 다양한 종류가 있습니다. (추후 심화 학습 내용에서 더 자세히 다룰 예정입니다.)
- 배치 경사하강법 (Batch Gradient Descent): 전체 학습 데이터를 이용하여 경사 (gradient) 를 계산합니다. 계산량이 많지만, 안정적으로 수렴하는 경향이 있습니다.
- 확률적 경사하강법 (Stochastic Gradient Descent, SGD): 하나의 데이터 샘플 또는 일부 데이터 (mini-batch) 만 이용하여 경사를 계산합니다. 계산량은 적지만, 수렴 과정이 불안정하고 진동할 수 있습니다.
- 미니 배치 경사하강법 (Mini-batch Gradient Descent): 배치 경사하강법과 확률적 경사하강법의 중간 형태로, 미니 배치 단위로 데이터를 나누어 경사를 계산합니다. 계산 효율성과 수렴 안정성을 절충한 방법입니다. 실제로 가장 널리 사용되는 경사하강법입니다.
- 모멘텀 (Momentum): 이전 업데이트 방향을 고려하여 관성을 더해주는 방식입니다. 지역 최적점을 탈출하고, 수렴 속도를 높이는 데 도움이 됩니다.
- AdaGrad, RMSProp, Adam: 학습률을 자동으로 조절해주는 알고리즘입니다. 파라미터마다 적응적으로 학습률을 조절하여, 학습 효율성과 성능을 향상시킵니다. Adam 은 현재 가장 널리 사용되는 최적화 알고리즘 중 하나입니다.
경사하강법, 한계점은 없을까? 지역 최적점, 학습률 민감도... 넘어야 할 산! ⛰️
경사하강법은 강력한 최적화 알고리즘이지만, 다음과 같은 한계점도 가지고 있습니다. 마치 완벽한 등산 장비는 없는 것처럼, 경사하강법도 완벽한 알고리즘은 아닙니다.
- 지역 최적점 (Local Minimum) 문제: 비용 함수가 볼록 함수가 아닌 경우, 경사하강법은 전역 최적점 (global minimum) 이 아닌 지역 최적점에 수렴할 수 있습니다. 지역 최적점은 전역 최적점보다 비용 함수 값이 높기 때문에, 모델 성능 저하를 야기할 수 있습니다. 마치 골짜기에 도착했지만, 그 골짜기가 가장 낮은 골짜기가 아닐 수 있는 것과 같습니다. 지역 최적점 문제를 해결하기 위해 다양한 경사하강법 변종 알고리즘 (모멘텀, Adam 등) 이 개발되었습니다.
- 학습률 (Learning Rate) 민감도: 학습률 값에 따라 학습 결과가 크게 달라질 수 있습니다. 적절한 학습률을 찾는 것이 중요하지만, 쉽지 않은 작업입니다. 학습률을 잘못 설정하면 학습이 제대로 이루어지지 않거나, 발산할 수 있습니다. 마치 적절한 보폭 크기를 찾는 것이 중요하지만, 쉽지 않은 것처럼, 학습률 튜닝은 경험과 노하우가 필요한 작업입니다.
- 초기 파라미터 (Initial Parameter) 의존성: 초기 파라미터 값에 따라 수렴 결과가 달라질 수 있습니다. 초기 파라미터를 잘 설정하는 것이 중요하지만, 최적의 초기 파라미터를 미리 알기는 어렵습니다. 다양한 초기값 시도, He 초기화, Xavier 초기화 등 초기값 설정 기법들이 연구되고 있습니다. 마치 출발점을 어디로 정하느냐에 따라 등산 경로와 최종 목적지가 달라질 수 있는 것처럼, 초기 파라미터 설정도 중요합니다.
경사하강법, 그래도 강력하다! 인공지능 학습의 핵심 엔진! 💪
이러한 한계점에도 불구하고, 경사하강법은 여전히 인공지능 학습에서 가장 널리 사용되는 강력한 최적화 알고리즘입니다. 경사하강법은 직관적이고 이해하기 쉬우며, 구현이 비교적 간단하고, 다양한 모델에 적용 가능하며, 실제로 좋은 성능을 보이는 경우가 많습니다. 마치 투박하지만 튼튼한 망치🔨처럼, 경사하강법은 인공지능 모델 학습이라는 복잡한 작업을 효과적으로 수행하는 핵심 도구입니다.
5.2.2 한 걸음씩 나아가는 학습, 경사하강법 실습 (Step-by-step Learning, Gradient Descent Practice)
경사하강법, 코드로 직접 구현해보자! 손으로 코딩하며 배우는 즐거움! 💻
이론만으로는 경사하강법을 완벽하게 이해하기 어렵습니다. 이제 파이썬 코드를 이용하여 선형회귀 모델과 경사하강법 알고리즘을 직접 구현해 보면서 경사하강법의 작동 원리를 체험하고, 직관을 키워봅시다! 마치 요리 레시피📖를 눈으로만 보는 것보다, 직접 요리🍳를 해보는 것이 훨씬 더 잘 이해되는 것처럼, 코딩 실습을 통해 경사하강법을 더 깊이 있게 이해할 수 있습니다.
실습 목표:
- 가짜 데이터 생성: 선형 관계를 가지는 가짜 학습 데이터를 생성합니다.
- 선형회귀 모델 정의: 선형회귀 모델 함수를 파이썬으로 정의합니다.
- 비용 함수 정의: MSE 비용 함수를 파이썬으로 정의합니다.
- 경사하강법 알고리즘 구현: 경사하강법 알고리즘을 파이썬 함수로 구현합니다.
- 학습 및 파라미터 최적화: 경사하강법을 이용하여 학습 데이터를 학습하고, 최적 파라미터 (w, b) 를 찾습니다.
- 결과 시각화: 학습 과정 및 결과를 그래프로 시각화하여 분석합니다.
실습 환경:
- 파이썬 (Python): 파이썬 프로그래밍 언어를 사용합니다. (필수)
- NumPy: 수치 계산 라이브러리인 NumPy 를 사용합니다. (필수)
- Matplotlib: 그래프 시각화 라이브러리인 Matplotlib 를 사용합니다. (선택)
실습 코드 (파이썬): 코드 따라 치면서 실습! ✍️
import numpy as np
import matplotlib.pyplot as plt
# 1. 가짜 데이터 생성
np.random.seed(0) # 결과 재현을 위해 랜덤 시드 고정
X = 2 * np.random.rand(100, 1) # 0~1 사이 난수 100개 생성 후 2배 -> X 값 (독립 변수)
y = 4 + 3 * X + np.random.randn(100, 1) # y = 4 + 3X + noise -> y 값 (종속 변수)
# 실제 관계: y = 4 + 3x, 학습 목표: w=3, b=4 에 근사
# 2. 선형회귀 모델 함수 정의
def linear_model(X, w, b):
y_pred = w * X + b
return y_pred
# 3. 비용 함수 (MSE) 정의
def cost_function(y, y_pred):
mse = np.mean((y - y_pred)**2)
return mse
# 4. 경사하강법 알고리즘 구현
def gradient_descent(X, y, w_init, b_init, learning_rate, iterations):
w = w_init
b = b_init
history_cost = [] # 비용 함수 값 변화 기록 리스트
for i in range(iterations):
# 예측 값 계산
y_pred = linear_model(X, w, b)
# 비용 함수 계산
cost = cost_function(y, y_pred)
history_cost.append(cost)
# 편미분 값 계산 (gradient 계산)
dw = np.mean(2 * X * (y_pred - y)) # MSE 편미분 (w)
db = np.mean(2 * (y_pred - y)) # MSE 편미분 (b)
# 파라미터 업데이트 (경사 하강)
w = w - learning_rate * dw
b = b - learning_rate * db
if i % 10 == 0: # 10번 반복마다 비용 함수 값 출력
print(f"Iteration {i}, Cost: {cost:.4f}")
return w, b, history_cost
# 5. 학습 실행
learning_rate = 0.1 # 학습률 설정
iterations = 100 # 반복 횟수 설정
w_init = 0 # 초기 가중치
b_init = 0 # 초기 편향
w_final, b_final, history_cost = gradient_descent(X, y, w_init, b_init, learning_rate, iterations)
print("\n최종 파라미터 (w, b):", w_final, b_final)
# 6. 결과 시각화
# 학습 데이터 산점도
plt.scatter(X, y, label='Original data')
# 예측 직선
x_test = np.array([[0], [2]]) # 예측 직선을 그리기 위한 x 값 범위
y_test = linear_model(x_test, w_final, b_final) # 예측 값 계산
plt.plot(x_test, y_test, color='red', label='Linear Regression Model')
# 비용 함수 값 변화 그래프
plt.plot(history_cost, label='Cost Function')
plt.xlabel('X')
plt.ylabel('y / Cost')
plt.title('Linear Regression with Gradient Descent')
plt.legend()
plt.show()
코드 설명:
- 1. 가짜 데이터 생성: np.random.rand, np.random.randn 함수를 이용하여 선형 관계 (y = 4 + 3x) 에 노이즈가 추가된 가짜 데이터를 생성합니다.
- 2. 선형회귀 모델 함수: linear_model 함수는 입력 X, 가중치 w, 편향 b 를 받아 선형회귀 모델 예측 값 를 계산합니다.
- 3. 비용 함수: cost_function 함수는 실제 값 y 와 예측 값 를 받아 MSE 비용 함수 값을 계산합니다.
- 4. 경사하강법 함수: gradient_descent 함수는 경사하강법 알고리즘을 구현합니다.
- 초기 파라미터 (w_init, b_init), 학습률 (learning_rate), 반복 횟수 (iterations) 를 입력으로 받습니다.
- iterations 만큼 반복하면서, 각 반복마다 편미분 값을 계산하고 파라미터를 업데이트합니다.
- 반복 중간중간 비용 함수 값을 출력하여 학습 과정을 모니터링합니다.
- 최종적으로 최적 파라미터 (w_final, b_final) 와 비용 함수 값 변화 기록 (history_cost) 를 반환합니다.
- 5. 학습 실행: 학습률, 반복 횟수, 초기 파라미터를 설정하고, gradient_descent 함수를 호출하여 학습을 실행합니다. 최종 파라미터 값을 출력합니다.
- 6. 결과 시각화: Matplotlib 라이브러리를 이용하여 학습 데이터 산점도, 예측 직선, 비용 함수 값 변화 그래프를 시각화합니다.
실습 결과:
코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
- 최종 파라미터 (w, b): 실제 관계 (w=3, b=4) 에 매우 가까운 값으로 수렴하는 것을 확인할 수 있습니다. (실행할 때마다 약간의 변동은 있을 수 있습니다.)
- 비용 함수 값 변화 그래프: 반복 횟수가 증가함에 따라 비용 함수 값이 점점 감소하는 것을 확인할 수 있습니다. 이는 경사하강법이 비용 함수를 성공적으로 최소화하고 있다는 것을 의미합니다.
- 학습 데이터 산점도 및 예측 직선: 학습 데이터 점들을 가장 잘 관통하는 직선 형태의 선형회귀 모델이 학습된 것을 시각적으로 확인할 수 있습니다.
심화 학습:
- 학습률 변화: 학습률 값을 다양하게 (예: 0.01, 0.5, 1.0) 변경해보면서 학습 결과가 어떻게 달라지는지 관찰해 보세요. 학습률이 너무 크거나 작을 때 어떤 문제가 발생하는지 직접 확인해 볼 수 있습니다.
- 반복 횟수 변화: 반복 횟수를 늘리거나 줄여보면서 학습 결과가 어떻게 달라지는지 관찰해 보세요. 반복 횟수가 부족할 때, 또는 너무 많을 때 어떤 현상이 나타나는지 확인해 볼 수 있습니다.
- 초기 파라미터 변화: 초기 파라미터 (w_init, b_init) 값을 다르게 설정하고 학습을 실행해 보세요. 초기 파라미터가 학습 결과에 미치는 영향을 실험해 볼 수 있습니다.
- 다른 경사하강법 알고리즘 적용: 배치 경사하강법 대신 확률적 경사하강법 (SGD) 또는 미니 배치 경사하강법을 구현하고, 학습 결과를 비교해 보세요. 각 알고리즘의 장단점을 직접 체감해 볼 수 있습니다.
'인공지능 · 데이터 과학 > 수학에서부터 경사하강법, 선형회귀까지' 카테고리의 다른 글
6. 손 계산과 구현(최종) (2) | 2025.02.06 |
---|---|
4-2. 벡터와 행렬 - 행렬 심화 (1) | 2025.02.06 |
4-1. 벡터와 행렬 - 벡터 심화 (0) | 2025.02.06 |
3. 벡터와 행렬 - 기초 (1) | 2025.02.06 |
2. 수학 심화 과정 (0) | 2025.02.06 |