저번주엔 번개불에 콩 구워먹듯이 ML을 했다.
이번주도 그러겠지.
사실 ML 내용도 다 숙지 하지 못했다. 그리고 체력도 바닥나서 살빠졌냐는 소리도 들었다. 심지어 먹는 양이 늘었는데도...이번주는 어떨지 좀 두렵다. 부디 내 뇌가 복습하는 기분으로 이번 주를 지내줬으면 좋겠다.
독서와 명상을 병행하면서 정신과 영혼을 살찌우고 키워나갈거다. 그렇게 버틸거다.
일정관리를 위해서 계획표를 어떻게 자동화할 지도 좀 고민해야겠다. 그냥 누가 주간 계획표 하나 짜줬으면 좋겠다. 학교 다닐땐 그런거 다 해줬는데 내가 하려니까 힘들다. 휴. 혼자서 다 해내는 사람들은 정말 대단한 것 같다...
대세는 파이토치
https://www.assemblyai.com/blog/pytorch-vs-tensorflow-in-2023/
PyTorch vs TensorFlow in 2023
Should you use PyTorch vs TensorFlow in 2023? This guide walks through the major pros and cons of PyTorch vs TensorFlow, and how you can pick the right framework.
www.assemblyai.com
- 파이토치와 텐서플로 중 파이토치 압도적 승
- 그렇다고 텐서플로를 모르면 안된다.
수업자료
https://colab.research.google.com/drive/1T9ltg_ybrpdMojOasuP2kg3WMvGbH3EN#scrollTo=ZrVvOrBpZkO4
Google Colab Notebook
Run, share, and edit Python notebooks
colab.research.google.com
인공신경망
- 인공신경망 = 선형 다항 회귀
- 인공신경망 기초단위 노드 = 퍼셉트론 (그 수많은 동그라미를 뜯어보면 아래와 같이 생겼다.)
- 퍼셉트론 = w(weight) , b (bias), h (activation function) 으로 구성
- x from previous nodes
- a=b+w1x1+w2x2+...+wmxm
- y=h(a)
- 퍼셉트론이 벡터로 쌓인 것 = 레이어
- 레이어 안의 모델(퍼셉트론)의 개수만큼 아웃풋이 나온다.
- 레이어안에서 모델은 독립적으로 연산. 서로 영향 안 줌
- 레이어(인공신경망)가 쌓여서 매트릭스로 구현 = 딥러닝
- 최종 레이어에 있는 노드 개수가 2개 이상이면 분류 / 1개면 선형 회귀
- 노드의 아웃풋 = 타겟이 될 확률을 시그모이드/소프트맥스 activation 함수를 써서 최종 분류 타겟 결정됨
- ML 과 다르게 DL에선 모델이 이해할 수 있기 위해 하는 feature extaction만큼은 알아서 해주지만, 그만큼 computing power(연산) 가 많이 든다.
- 수많은 input값을 연산하면서 알아서 feature 추출을 한다.
- GPU: 병렬 연산. 레이어 안에서 노드간에 연산을 안하고, 독립적으로 단순연산을 함. (복잡한 것도 아니고 초딩도 할 수 있을 수준의 계산을 인해전술 전략으로 때려버린다.)
손실함수
- 학습 후 손실값이 가장 적은 쪽으로 모델 성능 업데이트
- MSE 는 이차함수,
- MAE는 뾰족한 직선 형태
- BCE는 로그 함수,cross entropy
경사하강법
- 미분값
- 학습률과 학습속도는 반비례한다.너무 작으면 너무 빨리 끝나고, 너무 크면 수렴 안함.
- N차원 데이터 학습시 미분되서 찍혀지는 최소값이 여러 부분(local minima)이고, 학습률이 너무 크면 제일 낮은 미분값(global minima)에 도달하기 힘들다.
Optimizer
- 경사하강법 보완 (딥러닝에선 경사하강법으론 너무 오래 걸려서 나온 것)
- momentum은 뒤에서 누가 세게 밀어버리는 것이라 생각하면 된다. 가속도 붙음
- Prop은 맥락 보면서 감
- 요즘 제일 많이 쓰는 건 adam
역전파
- 모델 학습 방식 = 오차를 통해 파라미터 업데이트
- 출력 레이어에서 부터 입력 레이터 쪽으로, 뒤로 오차를 미분하면서 보내 파라미터를 계속 업데이트
기울기 소실
- 미분하고 미분하면서 기울기가 사라진다.
- 활성화 함수가 문제가 됨. sigmoid 함수를 미분하면 거의 0에 수렴함.
- 활성화 함수 때문에 다항 선형회귀가 가능, 복잡한 모델 생성 가능.
- 그래서 앞단의 레이어로 갈 수록 학습이 안된다.
- 미분해도 0에 수렴하지 않는 함수는? > ReLU
- 미분할 때 0아니면 1이기 때문에 기울기 소실 안됨.
- 역전파할 때도 빠르다.
- 단점은 오차의 양의 값(+) 만 업뎃 됨
- 음의 값도 업뎃하기 위해서 Leaky ReLU, Exponential ReLU
마법학교 요리사 이야기 🍳✨
옛날 옛날, 마법학교에는 최고의 요리사를 꿈꾸는 **꼬마 셰프 "리오"**가 있었어요. 리오는 마법 요리 대회에서 우승하기 위해 **"완벽한 수프"**를 만들고 싶었어요. 하지만 문제는... 수프 맛이 매번 달라지고, 도대체 뭐가 문제인지 몰랐다는 거예요! 😵💦
그때, 마법학교의 지혜로운 선생님이 리오에게 말했어요.
"리오야, 인공신경망과 비슷한 방법으로 요리를 개선해 보면 어떨까?"
리오는 고개를 갸우뚱했지만, 선생님의 설명을 듣고 실험을 시작했어요! 🏃♂️💨
1. 인공신경망 = 요리사 팀 👨🍳👩🍳
리오는 요리사 팀을 만들었어요. 요리사들은 각각 다른 역할을 맡았어요.
- 어떤 요리사는 소금을 넣고,
- 어떤 요리사는 후추를 추가하고,
- 또 다른 요리사는 불 조절을 맡았어요.
이렇게 여러 명의 요리사가 힘을 합쳐 최고의 수프를 만드는 과정이 바로 **인공신경망(Artificial Neural Network)**이에요! 🏗️
그런데 요리사들이 처음부터 완벽한 맛을 낼 수 있을까요? 아니에요! 😖
2. 손실 함수 = 맛 점수 🍲🏆
리오는 수프를 만들 때마다 **맛 점수(손실 함수, Loss Function)**를 매겼어요.
- 맛이 너무 짜면 ❌ "점수 낮음!"
- 싱거우면 ❌ "점수 낮음!"
- 적당히 간이 맞으면 ✅ "점수 높음!"
즉, 맛 점수는 수프가 얼마나 원하는 맛과 가까운지를 측정하는 기준이에요.
리오는 손실 함수가 낮아질수록(점수가 높아질수록) 더 나은 요리가 된다는 사실을 깨달았어요! 🎯
3. 경사 하강법 = 요리 조절하기 🔄
리오는 맛 점수를 개선하기 위해 요리법을 조금씩 바꿔보기로 했어요. "소금을 줄여볼까? 불 세기를 낮춰볼까?"
이렇게 조금씩 바꿔가면서 손실 함수를 낮춰 나가는 과정이 바로 **경사 하강법(Gradient Descent)**이에요. 🏔️⬇️
하지만 만약 한 번에 너무 확 바꿔버리면? 😨
- 소금을 확 줄이면 수프가 싱거워지고...
- 불을 확 낮추면 수프가 익지 않고...
그래서 천천히, 조금씩 조절하는 게 중요해요!
4. 옵티마이저 = 최고의 요리 전략 🛠️
리오는 다양한 방법으로 조절을 해봤어요.
- "소금을 먼저 조절해야 할까?"
- "아니면 불 조절을 먼저 할까?"
이렇게 맛을 최적화하는 방법을 결정하는 과정이 바로 **옵티마이저(Optimizer)**예요.
옵티마이저는 요리를 개선하는 전략을 의미해요.
5. 역전파 = 요리사들에게 피드백 주기 🔁
리오는 맛을 보고 나서 요리사들에게 피드백을 줬어요.
"소금 담당 요리사야, 소금을 조금 줄여 줘!"
"불 조절 요리사야, 불을 좀 세게 해 줘!"
이렇게 잘못된 부분을 찾아서 거꾸로(역으로) 신호를 보내 조절하는 과정이 **역전파(Backpropagation)**예요! 🔄
덕분에 요리사들은 점점 더 좋은 요리를 만들 수 있었어요! 🎉
6. 기울기 소실 = 속삭이는 목소리 문제 🗣️❌
그런데 문제는, 요리사가 너무 많아서 멀리 있는 요리사에게는 리오의 목소리가 잘 안 들리는 것이었어요.
예를 들어, 소금을 담당하는 요리사에게는 명확한 피드백이 전달되지만, 아주 작은 재료를 담당하는 요리사는 거의 아무런 조정을 하지 않게 되는 문제가 생겼어요.
이게 바로 기울기 소실(Vanishing Gradient) 문제예요. 🚨
리오는 이 문제를 해결하기 위해 더 좋은 전략(옵티마이저 개선, 새로운 레시피 등)을 고민했어요!
7. 드디어 완벽한 수프 완성! 🎉🍲
리오는 여러 번의 실험 끝에 손실 함수(맛 점수)를 낮추고, 경사 하강법으로 천천히 조절하면서, 역전파를 활용해 요리사들에게 정확한 피드백을 주는 방법을 깨달았어요!
결국, 최고의 수프를 만들었고, 마법 요리 대회에서 우승했어요! 🏆✨
정리
개념 비유인공신경망 | 여러 요리사가 힘을 합쳐 요리하는 팀 |
손실 함수 | 요리의 맛 점수를 매기는 기준 |
경사 하강법 | 조금씩 조절하면서 맛을 개선하는 과정 |
옵티마이저 | 어떤 방식으로 조절할지 결정하는 전략 |
역전파 | 요리사들에게 피드백을 주어 개선하는 과정 |
기울기 소실 | 너무 멀리 있는 요리사는 피드백을 잘 못 받는 문제 |
이제 리오처럼, 인공신경망도 계속 배우고 조절하면서 최고의 결과를 찾아가는 과정을 겪어요! 🚀
이해하기 쉬웠나요? 😊
Batch
- batch는 전체 데이터셋을 쪼개서 나뉜 데이터 묶음
- 미니 배치 경사 하강법 > 데이터 쪼개서 각각에 대한 기울기에 대한 평균 구하기
- stochastic gradient descent를 많이 쓴다. local optima에 떨어진 위험이 적기 때문에
- epoch: 모든 배치 학습이 한 바퀴 돌아가는 단위
- 배치 학습 하다보면 배치간 데이터 분포 차이가 생겨 정규화 진행
'SK Networks Family AI bootcamp 강의노트' 카테고리의 다른 글
24일차 [ Loading Dataset (중요한 내용) ] (0) | 2025.02.18 |
---|---|
23일차 [ pytorch (중요) ] (0) | 2025.02.17 |
22일차 [ AutoML / XAI / Pipeline ] (0) | 2025.02.14 |
21일차 [ 불균형 데이터셋 전처리 / cross validation / ML flow] (1) | 2025.02.13 |
20일차 [ 비지도 학습 (데이터 차원 축소 및 행렬 분해) ] (1) | 2025.02.12 |