컴퓨터/AI

MIT Introduction to Deep Learning 6.S191: Lecture 1

수제녹차 2025. 5. 30. 18:14
728x90
반응형

https://youtu.be/alfdI7S6wCY?si=uz2kjnaBIhncetuV

 

MIT Introduction to Deep Learning, https://youtu.be/alfdI7S6wCY?si=7KZhth2zU8oJPnYM

Teaching computers how to learn a task directly from raw data.

 

* Why Deep Learning and Why now?

tranditional machine learning typically defines what are called sets of features.

These bar basically rules of how to do a task step by step.

The problem is that we're not usually good at building very robust features so far.

 

the key idea of deep learning is to say after observing a lot of faces can I learn that I should first detect things in this hierarchical fashion

 

1. 전통적 머신러닝의 한계

  • 수작업 특징(feature) 설계
    • 모델에 넣어야 할 정보(엣지, 색상, 모양 등)를 사람이 일일이 정의
    • 예: 얼굴 인식을 하려면 ‘눈 모양’, ‘코 위치’ 같은 규칙을 직접 코딩
  • 견고한(robust) 특징 만들기 어려움
    • 다양한 조명, 각도, 표정 변화에 강한 특징을 설계하기가 매우 까다로움
    • 연구자마다, 문제마다 달라지는 복잡한 튜닝 필요

2. 딥러닝의 핵심 아이디어

“많은 얼굴 이미지를 관찰한 뒤, ‘이렇게 계층적으로 먼저 특징을 뽑아야겠다’라는 규칙을 스스로 학습하도록 하자.”

  1. 계층적 특징 학습 (Hierarchical Feature Learning)
    • 1층(저수준): 엣지(edge), 선(line), 색깔 같은 아주 단순한 패턴 학습
    • 2층(중간수준): 1층에서 뽑힌 엣지들이 모여 간단한 도형(삼각형, 원 등)이나 질감(texture) 학습
    • 3층(고수준): 2층 특징들이 조합되어 눈·코·입 같은 얼굴의 구성 요소 학습
    • 출력층: 얼굴 여부, 사람 식별, 감정 분류 등 최종 태스크 수행
  2. “계층적으로 뽑아라”를 스스로 배운다
    • 사람이 “먼저 엣지를 뽑고, 그다음 조합해서 더 복잡한 것을…”이라고 지시하지 않아도
    • 수천만 개의 데이터와 다층 신경망(딥 네트워크)을 통해 필요한 특징 추출 과정을 스스로 최적화

3. “Why Now?”—지금 가능한 이유

  1. 풍부한 데이터(Big Data)
    • 인터넷·스마트폰·SNS를 통해 수억 장의 이미지, 음성, 텍스트 데이터 확보
  2. Compute. 강력한 연산 자원(GPUs, TPUs 등)
    • 과거 CPU만으로는 수십, 수백 레이어를 학습시키기 어려웠으나
    • GPU 병렬 연산으로 빠르게 매개변수를 업데이트 가능
  3. 알고리즘·아키텍처 발전
    • ReLU 활성화, 배치 정규화(BatchNorm), 잔차 연결(Residual Connection) 등
    • 학습 안정성과 성능을 높이는 핵심 기법들 등장

요약

  • 전통 ML은 사람이 특징을 직접 정의해야 하지만,
  • 딥러닝은 “데이터와 네트워크 구조만 주면, 어떤 특징을 먼저 뽑고 어떻게 조합해야 할지 스스로 학습”
  • 대규모 데이터와 고성능 하드웨어, 개선된 학습 기법 덕분에 이제 실전 적용이 가능해졌다.

이처럼 딥러닝은 **“왜 지금?”**라는 질문에 대해, 충분한 데이터·연산·알고리즘이 갖춰진 덕분에 비로소 진가를 발휘할 수 있게 된 것입니다.

 

 

* The Perceptron: The structural building block of deep learning

 

x_1...x_m을 각각의 가중치(w_1...w_m)와 곱한 다음 더 한다.

그 후 nonlinear activation function(nonlinear one-dimensional function)으로 계산한다.

예측값은 y hat과 같이 hat을 씌운다.

1(bias term)을 추가한다.

shifting scalar다.

Bias는 결정 경계를 "평행이동" 시켜주는 역할을 한다.


🔍 Bias 없는 Perceptron

Perceptron의 기본 식은 다음과 같다:

이 식은 원점을 지나는 결정 경계만 만들 수 있다.
즉, 직선이나 초평면이 원점(0,0,...)을 꼭 지나야 하기 때문에,
학습 가능한 패턴에 제한이 생긴다.


✅ Bias가 들어가면 이렇게 바뀐다:

여기서 bbias term, 즉 상수항.

  • 이 항 덕분에 결정 경계를 원점에서 떨어진 곳으로 평행 이동할 수 있다.
  • 다시 말해, 더 다양한 데이터 분포에 대응 가능하다.

X: a collection of all of my inputs

W: a collection or a vector of all of my weights

sigmoid function

딥러닝에서 자주 쓰이는 비선형 활성 함수

x축으로는 어떤 실수값도 가능,

y축으로는 0~1 사이 값만 가능 (입력값을 0과 1 사이의 확률 값처럼 변환해주는 함수)

단점 설명
Vanishing Gradient 입력이 매우 크거나 작으면(0 또는 1에 가까울 때), 기울기(미분값)가 거의 0, 역전파 과정에서 기울기가 계속 작아지면 가중치가 잘 안 바뀌게 되어 학습이 멈춘다.
신경망이 학습하려면 "이 방향으로 가야 해!"라는 신호를 줘야 하는데, 그 신호가 점점 작아져서 결국 "뭐 어떻게 해야 할지 모르겠어"가 된다.
출력 중심화 안 됨
  • sigmoid는 출력이 항상 0~1 사이.
  • 평균이 0이 아니라서, 다음 층의 입력값들이 한쪽으로 치우친 상태가 된다
    다음 층의 gradient가 불안정해짐
계산 느림 지수 함수 e−xe^{-x} 계산이 tanh, ReLU보다 상대적으로 비쌈

 

* 활성화 함수가 필요한 이유?

 

real world, real data는 매우 nonlinear 하기 때문에 필요하다.

z: 선형 조합의 결과 (weighted sum)

왼쪽에 있는 퍼셉트론 구조에서, 입력 값들과 가중치를 곱해서 더한 값

위 예에서는 -6

 

y: activation function 적용 후 결과

위 예에서는 0.002

 

따라서 왼쪽 blue side에 속한다.

 

 

* Building Neural Networks with Perceptrons

 

비선형 활성화 함수 적용 전 값을 z라 한다

퍼셉트론: 뉴런 1개, 입력값들을 받아서 가중치 곱하고, 모두 더한 다음, 활성화 함수를 통과시켜서 출력 하나를 만든다.

계산기에 비유할 수 있음

 

레이어: 퍼셉트론 여러 개를 모아놓은 것

입력을 받으면, 각 퍼셉트론이 자기 방식대로 계산해서 출력 여러 개를 동시에 만든다.

계산기 여러 개를 나란히 배치한 계산기 묶음 세트

 

신경망(Network): 퍼셉트론이 모여 레이어가 되고, 여러 레이어가 쌓이면 신경망이 된다.

 

신경망에서 말하는 레이어는 보통 은닉층(hidden layer)의 개수를 기준으로 센다.

입력층: 레이어로 안 셈

출력층: 마지막 결과이기 때문에 별도로 안 셈

 

실제 계산은 두 번 이루어진다.

입력-> 은닉층, 은닉층 -> 출력층

하지만 이건 단지 신호가 레이어를 통과하면서 생기는 중간 연산일 뿐이고,

은닉층이 하나면 Single Layer라고 부른다.

입력 수는 정보의 폭,
레이어 수는 생각의 깊이

✅ 1. 입력이 많아지는 이유 (더 많은 Input)

👉 더 많은 정보 = 더 풍부한 특성(feature)

  • 입력값은 모델이 세상을 이해하는 이야.
  • 예를 들어:
    • 이미지라면 → 각 픽셀이 입력 (수천 개 이상)
    • 텍스트라면 → 각 단어 또는 단어 벡터
    • 비즈니스 데이터라면 → 사용자 정보, 클릭 수, 구매 이력 등등

📦 비유:

  • 사람이 사과를 보고 색, 크기, 냄새 등을 종합적으로 판단하듯이,
  • 입력이 많으면 많을수록 모델이 더 많은 "단서"를 보고 판단할 수 있어.

✅ 2. 레이어를 여러 개 쌓는 이유 (Deep → 표현력 ↑)

👉 더 복잡한 패턴을 학습하기 위해

  • **얕은 네트워크(레이어 1~2개)**는 단순한 규칙밖에 못 배워.
  • 반면 **깊은 네트워크(레이어 여러 개)**는:
    • 저층은 단순한 특징 (ex: 선, 모서리)
    • 중간층은 조합된 특징 (ex: 눈, 코)
    • 고층은 복잡한 패턴 (ex: 얼굴, 고양이)

이걸 Feature Hierarchy라고 해. 단순 → 복잡을 단계적으로 쌓는 거지.

뉴럴 네트워크를 만들었다고 끝이 아니다.

훈련을 시켜야 한다.

 

Loss 계산: 신경망에서 예측한 값이 실제 정답과 얼마나 다른지 측정한는 과정

empirical: 경험에 의거한, 실증적인

모든 data point에서의 loss 값을 평균한 값

 

Binary Cross Entrophy: 확률로 예측한 결과가 정답과 얼마나 가까운지 측정하는 손실함수

로그 함수는 예측이 자신감 있게 틀릴수록 벌을 크게 준다.

예측값이 정답과 멀수록, 특히 0 또는 1에 가까운 극단적인 확신을 가진 틀린 예측일수록 Loss가 급격히 증가한다.

 

학생이 클래스를 pass or fail할지 예측하는 모델 등 분류하는 모델에 쓰인다.

 

딥러닝에서, 자연로그는 밑이 e ≈ 2.718

학점 예측할 땐 이와 같이 (실제값 - 예측값)의 제곱의 평균을 구하는 loss를 사용할 수 있다.

 

 

모델을 만들 때 loss를 최소화하는 것을 목표로 한다.

loss를 최소화하는 가중치를 구한다.

 

argmin 뜻

argument of the minimum의 줄임말

어떤 함수가 최소값을 가질 때의 입력값

 

* 경사하강법 (Gradient Descent)

 

딥러닝에서 가중치를 학습시키는 핵심 알고리즘

핵심 아이디어는 계속 기울기를 따라 내려가자

어떤 포인트를 잡는다.

gradient를 본다. grident는 which way is up인지(증가하는 방향을) 알려준다.

우리는 Loss를 줄이고 싶으니가, 그 반대 방향으로 가야 한다. - 기울기 방향

 

  • 지금 위치에서 **기울기(gradient)**를 계산해서,
  • 반대 방향으로 조금씩 이동
  • 계속 반복하면 결국 Loss가 최소가 되는 지점에 도달

1개의 가중치 w일 때

 

 

기호 의미
w 현재 가중치
𝜂 학습률 (learning rate), 한 번에 얼마나 이동할지, step size
\frac{∂J(w)|∂w} 손실 함수 J(w)J(w)의 기울기

1. randomly pick a place in our landscape

3. compute gradient: how much a small change in our weights, change our loss

우리가 어느 방향으로 weight를 바꿔야 하는지 알려준다

 

* back propagation: 뉴럴 네트워크에서 gradient를 계산하는 방법

 

keep computing iterative chain rules back and back over the course of your network step by step

gradient가 +라면, weight를 증가시켰을 때 loss가 증가한다.

gradient가 -라면, weight를 증가시켰을 때 loss가 감소한다. 그 방향으로 weight를 변경해야 한다.

 

 

* How can we set the learning rate?

 

 

How to deal with this?

 

Idea 1. common idea

Try lots of different learning rates and see what works "just right"

 

Idea 2. Do something smarter!

Design an adoptive learning rate that "adapts" to the landscape

SGD => base algorithm

Adam => 많이 쓰인다.

 

 

* back propagation 단점

 

can be very computationally intensive to compute

 

Gradient Descent랑 **Stochastic Gradient Descent (SGD)**

둘 다 경사하강법.

차이는 기울기를 계산할 때 사용하는 데이터 양

 

Gradient Descent: 배치 경사하강법, Full-Batch GD

전체 데이터를 한꺼번에 써서 기울기 계산

모든 데이터로 loss 평균 계산하고 그걸로 기울기 1개 계산 -> 한 번 가중치 업데이트

 

Stochastic Gradient Descent: 확률적 경사하강법, SGD

매번 데이터 하나만 골라서 기울기 계산

stochastically select a subset of data, and that selection is stochastic. 

빠르게 움직이지만 좀 튀는 경로로 내려감

 

Mini-batch Gradient Descent

실무에서 가장 많이 씀

전체 데이터를 조금씩 나눠서 기울기 계산

Full GD와 SGD의 중간

빠르고 적당히 안정적

 

 

* 과적합

 

딥러닝 모델은 에폭(epoch)을 반복할수록 훈련 데이터에는 점점 더 잘 맞는다.

하지만 일정 시점부터는 검증 데이터에는 오히려 성능이 나빠진다.

이게 바로 과적합!

 

훈련 데이터에 너무 과적합되면 안 된다

how well the model works on brand new data when we deploy it into the wild 가 중요하다

we use the training data as a proxy 

When we build models, we want to learn representations from our training data

but we still want them to generalize to unseen test data as well.

 

* Regularization

 

Technique that contains our optimization problem to discourage complex model 

 

improve generalization of our model on unseen data

Dropout: 학습할 때 무작위로 일부 뉴런을 끄는 것

혼자 잘하는 뉴런을 랜덤하게 빠지게 해서 팀워크를 강제한다.

forces the network not to relay so much on the outputs of any one neuron

forcing the model to learn multiple pathways to make a single decision

random pathway 만들기

 

 

 

모델이 더 이상 좋아지지 않으면 학습을 중단하는 방법

 

monitor between our training loss and our test loss

 

  • 학습하면서 매 에폭마다 검증 loss나 accuracy를 기록
  • 이전보다 성능이 개선되지 않는 에폭이 N번 계속되면 stop
    • 이때의 N = patience 값 (기다리는 인내심)

 

model이 stronger, 좋아지다가 plateu(안정기, 정체기)가 생긴다

그리고 test 데이터에 대해 loss가 증가하기 시작한다.

 

 

반응형