Deep Learning
기본 개념
딥러닝이란?
딥러닝이란 인간의 신경망의 기본 메커니즘이다.

1. 가지 돌기에서 신호를 받는다.
2. 신호가 축삭 돌기를 지나 축삭 말단으로 전달된다.
3. 축삭돌기를 지나는 동안 신호가 약해져서 축삭 말단까지 전달되지 않거나 강하게 전달되기도 한다.
4. 축삭 말단까지 전달된 신호는 다음 뉴런의 가지 돌기로 전달된다.
5. 수억 개의 뉴런 조합을 통해 손가락을 움직이거나 물체를 판별하는 등 다양한 조작과 판단 수행이 가능하다.
ANN : Artificial Neural Network
Denfrite : Input Layer
Axon : Output Layer
Scale of action potential : Weight

단층 퍼셉트론
은닉층 없이 입력층 - 출력층으로 구성되어있다.
노란색 층은 사실상 출력층 역할을 한다.
입력값 x들에 가중치 w를 곱하고, 이 값을 모두 더한 다음 활성화 함수를 거쳐 출력값 y를 만든다.
하지만 XOR같은 비선형 문제를 해결하지 못한다는 한계가 있다..

다층 퍼셉트론 (MLP)
입력층 - 은닉층(2개 이상) - 출력층으로 구성되어 있다.
일단 은닉층이 하나라도 있으면 MLP라고 부르며, 은닉층이 2개 이상이면 deep하다고 할 수 있다.
각 층은 이전 층의 출력을 입력값으로 사용하여 가중치와 계산하고 비선형 활성화 함수를 적용한다.
단층 퍼셉트론과 다르게 비선형 문제도 해결 가능하다!

DNN 원리
딥러닝은 계층적으로 고수준 특징을 분석한다 .

딥러닝의 유형
신경망
MLP
DBN
Deep Belief Network
확률 그래프 기반의 깊은 신경망이다.
CNN
Convolution Neural Network
이미지 처리에 강력한 합성곱 계층을 사용하는 신경망이다.
RNN
Recurrent Neural Network
순차 데이터인 문장, 음성 등에 강한 성능을 보이는 신경망이다.
위의 3개의 신경망은 Deep Neural Network (DNN)에 속한다.
RBM
Restricted Boltzmann Machine
비지도 학습용 확률적 신경망이다.
AE
AutoEncoder
입력을 압축하고 다시 복원하는 구조를 가진 비지도 학습 기반 신경망이다.
2-Layer Perceptron ~ Regression
Linear : 회귀
Logistic : 이진 분류
Softmax : 다중 클래스 분류
딥러닝 원리
신경망은 학습을 통해 특징을 자동으로 추출한다.
1. Rule-Based system : 룰 기반 시스템
입력 → 사람이 직접 작성한 규칙 → 출력
2. Classic ML : 고전 기계학습
입력 → 사람이 특징 추출 → ML 모델 학습
3. Representation Learning : 표현 학습
입력 → 모델이 특징도 학습한다. 딥러닝 이전에도 존재했지만 좀 단순했다.
4. Deep Learning : 딥러닝
입력 → 단순한 특징 → 더 추상적인 특징 → 출력
이 프로세스가 딥러닝의 핵심이다.
여러 층을 거쳐 입력을 고수준 특징으로 자동 추출에서 예측까지 하는 것이다!

딥러닝 프레임워크
기본적인 NN vs 딥러닝
기본 신경망
일반 신경망의 특징은 사람이 직접 특징을 추출한다는 것이다.
어떤 특징이 중요할 것 같다고 생각하여 사람이 골라낸 특징을 머신에게 넘기고 그 다음 신경망이 학습을 수행하게 되는 것이다.
이렇게 사람이 특징을 직접 추출하는 방식의 경우 사람이 얼마나 특징을 잘 뽑냐에 따라 성능이 좌우된다는 단점이 있다.
아무리 모델이 열심히 학습을 해도, 특징 추출 자체가 잘 되지 않으면 의미가 없는 것이다.


은닉층이 적어 연산이 단순하고 표현 능력에 한계가 있다.
딥러닝
딥러닝의 핵심은 특징 추출과 분류를 동시에 진행하는데 이 과정이 자동으로 진행된다는 점이다.
학습하면서 고차원의 특징까지 뽑아내기 때문에 사람이 일일이 특징 추출을 하지 않아도 된다.
자동화와 높은 성능이라는 장점을 가지고 있고, 이미지나 음성같은 복잡한 데이터에서 특히 높은 성능을 보였다.


은닉층이 수십~수백층 정도로 매우 많다.
다양한 필터와 모듈을 조합하여 복잡한 패턴을 인식이 가능하게 한다.
딥러닝의 개념 및 정의

입력층 : 학습하고자 하는 데이터를 입력 받는 층이다.
은닉층 : 모든 입력 노드로부터 입력값을 받아 가중합을 계산하고, 해당 값을 활성화 함수에 적용하여 출력층에 전달한다.
출력층 : 최종 결과를 출력한다.
가중치 : 입력 신호가 출력에 미치는 영향을 조절하는 파라미터로, 입력값의 중요도를 결정하는 값이다.
편향 : 가중합에 더하는 상수로, 하나의 뉴런에서 활성화 함수를 거쳐 최종적으로 출력되는 값을 조절한다.
활성화 함수
활성화 함수란 뉴런이 출력을 할지 말지 결정하는 문지기 역할을 하는 함수이다.
입력의 가중합만 쓰게 되면 전부 선형이 되어버려 복잡한 문제는 풀지 못한다는 문제가 있다.
따라서 활성화 함수를 통해 비선형성을 부여하고, 딥러닝이 복잡한 패턴도 학습할 수 있도록 한다.
활성화 함수의 종류에는 여러가지가 있다.
Sigmoid
0~1 사이 값을 가지며, 이진 분류에서 사용한다.
단, 기울기 소실 문제가 발생할 가능성이 있다.

tanh
-1~1 사이 값을 가지며 시그모이드와 다르게 중심이 0이라 성능이 더 좋다.

ReLU
음수면 0, 양수면 그대로 출력하여 빠르고 간단하게 표현할 수 있어 많이 사용된다.

Leaky ReLU
ReLU는 죽은 뉴런을 만들 수 있다는 단점이 존재하는데, Leaky ReLU는 음수도 어느정도 전달하는 방식을 사용하여 ReLU의 죽은 뉴런 보완할 수 있다.

Maxout
여러 선형 조합 중 최대값을 사용하여 성능이 좋다.
하지만 연산량이 많다는 단점이 있다.

ELU
Leaky ReLU보다 부드럽고, 출력 평균이 0에 가까워 안정적이다.

❓ 왜 활성함수가 필요할까?
1. 신호를 보낼지 말지 결정
뉴런은 무조건 항상 신호를 보내면 안된다.
필요할 때만 출력을 해야하는데, 이는 정보의 흐름을 효율적으로 하기 위해서이다.
이 과정에서 활성화 함수가 필요한 것이다.
2. 비선형성 부여
딥러닝의 핵심은 비선형이다.
데이터를 잘 구분하기 위해서는 비선형 함수가 필수적이다.
활성화 함수가 없으면 모델은 그냥 선형 회귀와 다를게 없다.
여러 층을 쌓아도 의미가 없게되고, 하나의 선형 함수로 압축되는 것이다.
z = ∑ ( ω x ) + b
→
output = activation(z)
해당 식은 뉴런의 가중합 연산식이다.
이 z 값을 활성화 함수에 넣어 최종 출력값을 만들어 내는 것이다
계산 그래프 : Computational Graph
계산 그래프는 복잡한 수식 과정을 시각적으로 표현한 그래프다.
연산 또는 값인 노드와 데이터의 흐름 방향인 엣지로 구성되어 있다.
ex)
x, y라는 입력 노드가 있고, 이 둘을 더해 z= x+y를 계산하는 노드로 흘러간다.
이처럼 복잡한 연산을 작은 노드들로 나눠서 처리할 수 있는 것이다.

역전파
🔎 계산 그래프를 사용하는 이유
1. Local Computaion
전체가 아닌 해당 노드 주변 계산만 집중하면 된다.
즉, 복잡한 계산을 단순하게 나누는 것이다.
2. 미분 계산 용이
각 노드마다 미분을 계산해서 역방향으로 전달이 가능한데, 이것이 역전파의 핵심이다.
역전파의 흐름
딥러닝에서 흐름은 2가지가 존재한다.
1. 순전파
왼쪽에서 오른쪽으로 진행되며 입력값 → 연산 → 출력값 도출 순서로 동작한다.
데이터를 흘리는 과정
2. 역전파
오른쪽에서 왼쪽으로 진행되며 출력의 오차를 각 입력 노드로 역으로 전달하여 가중치를 업데이트 한다.
출력 → 오차 계산 → 미분으로 가중치 조정 순서로 동작한다.
오차(미분값)을 역으로 전달하는 과정

역전파 개요
역전파는 계산 결과와 정답 사이의 오차를 바탕으로 가중치와 편향(바이어스)을 수정해나가는 과정을 말한다.
역전파의 작동 원리를 요약하면 아래와 같다.
1- 예측값과 정답을 비교하여 오차를 계산한다.
2- 오차를 줄이도록 weight, bias를 업데이트한다.
3- 1,2 과정을 반복하여 정확도를 올린다.
학습 데이터를 전체 한바퀴 도는 것을 우리는 Epoch(에포크)라고 한다.
예를 들어 1epoch는 모든 데이터로 1회 학습한다는 의미이다.
→ 에포크 수를 높일수록 정확도가 증가하지만, 그만큼 학습 시간도 오래걸린다.
→ 에포크 수를 줄일수록 속도는 빨라지지만, 정확도가 감소한다.
역전파 계산 절차
1. 입력값 계산
→ x * w + b : 입력 x 가중치 + 편향
2. 출력값과 정답의 차이인 오차 계산
→ 예를 들어 정답은 1인데, 출력값이 0.7이면 이 둘의 오차는 0.3이다.
3. 오차를 줄이기 위한 방향으로 미분 계산
→ 이게 바로 기울기(gradient)이다.
이 방향을 따라 가중치를 조금씩 감소시키거나 증가시키면 된다.
4. 출력층의 가중치 먼저 수정
→ 점차적으로 은닉층까지 거슬러 올라가며 업데이트한다.
(역전파는 순전파와 다르게 출력층에서 은닉층 순서로)
5. 오차가 줄어들지 않을 때까지 반복
여기서 핵심은 위 2~4단계를 반복한다는 것이다.
오차가 더 이상 줄어들지 않을 때까지 진행하고, 줄어들지 않는 지점에 도달하면 학습을 종료
역전파의 흐름 - Chain Rule
순전파 vs 역전파
순전파: Forward
x, y → f → t → g → z
👉 데이터를 앞 방향으로 전달해서 최종 출력값 z를 얻는 과정이다.
역전파 : Backward
∂z/∂z → ∂t/∂z → ∂x/∂z , ∂y/∂z
👉 출력값 오차로부터 역으로 미분 값을 전달하며 가중치 업데이트 방향을 정한다.
❓ chain rule이란?
chain rule : 연쇄 법칙
👉 ∂z/∂x = ∂z/∂t ⋅ ∂t/∂x 처럼 각 레이어의 기울기를 곱해서 전체 기울기를 계산한다.

왜 편미분을 사용하는가?
1. 오차를 줄이기 위해 바로 앞 가중치를 수정
예측값과 정답 사이의 차이를 줄이기 위하여 각 노드의 가중치와 바이어스를 수정해야 한다.
2. 수정할 값은 편미분으로 계산
각 노드는 연결된 일부 가중치만 사용하기 때문에 모든 가중치를 볼 필요 없고, 해당 노드에 연결된 가중치 부분만 계산해주면 된다.
3. chain rule 덕분에 복잡한 구조도 가능
레이어가 아무리 많아도 ∂z/∂x = ∂z/∂t ⋅ ∂t/∂x 식으로 간단히 나눠서 계산이 가능하다.
역전파 예시 - 덧셈
➡️ 순전파 계산
예를 들어 z = x+y라는 식이 있다고 가정해보자.
계산 그래프는
- 입력노드 x, y
- 연산 노드 +
- 출력 노드 z
로 구성된 왼쪽 그림과 같을 것이다.
x=2, y=6이면 둘이 그냥 더해서 z는 8이라는 출력을 하게 될 것이다.

⬅️ 역전파 계산
z = x+ y라는 식에서 각각 ∂z/∂x , ∂z/∂y를 계산해준다.
편미분 하는법
∂z/∂x는 변수 x가 바뀔 때, 결과값 z가 얼마나 바뀌는지를 의미하는 것이다.
즉, x가 1만큼 변할 때 z는 얼마나 변하는지를 표현하는 수학적 표현인 것이다.
z = x+y 식을 각각 z를 x와 y에 대해 편미분한 것은 아래와 같다.
∂z/∂x = 1, ∂z/∂y=1
이를 해석해보면 x만 변화시키면 z는 x와 동일하게 변화한다. (변화율이 1)
y만 변화시킬 때도 마찬가지로 z는 y와 동일하게 변화한다. (변화율이 1)
역전파 예시 - 곱셈
➡️ 순전파 계산
예를 들어 z = xy라는 식이 있다고 가정해보자.
계산 그래프는
- 입력노드 x, y
- 연산 노드 x
- 출력 노드 z
로 구성된 왼쪽 그림과 같을 것이다.
x=2, y=6이면 둘이 그냥 곱해서 z는 12이라는 출력을 하게 될 것이다.

⬅️ 역전파 계산
z = xy라는 식에서 각각 ∂z/∂x , ∂z/∂y를 계산해준다.
각각 ∂z/∂x = y, ∂z/∂y = x가 나온다.
이는 x가 변할 때 z는 y만큼 영향을 받는다는 것이고, y가 변할 때는 z가 x만큼 영향을 받는다는 것이다.
위에서 들었던 예시를 가져와서 보면 x=2, y=6이니까 ∂z/∂x = 6, ∂z/∂y = 2가 된다.
그럼 x가 1 증가할 때 z는 6만큼 증가한다는 것이고, y가 1 증가할 때 z는 2만큼 증가한다는 뜻이된다.
여기서 L은 최종 Loss를 의미한다.
∂L/∂z 즉, 출력 방향에서 넘어온 기울기 값이 1.5라고 가정을 해보자.
위에서 구한 것과 합쳐서 생각을 해보자.
x가 1 증가할 때 z는 6만큼 증가한다.
→ z의 변화량이 1.5일 때, x 쪽으로의 영향은 9다.
y는 1 증가할 때 z가 2만큼 증가한다.
→ z의 변화량이 1.5일 때, y 쪽으로의 영향은 3이다.

역전파 예시 - 덧셈과 곱셈
➡️ 순전파
전체적인 흐름은 아래와 같다.
1. q = x+y
2. f = q*z
즉 f=(x+y)*z인 것이다.

예시 값 x= -2, y= 5, z =4을 넣어 계산해보자.
1. q = -2 + 5 =3
2. f = 3 * 4 = 12
따라서 f = (-2+5)*4 = 12가 되는 것이다.
➡️ 역전파
우리가 구해야되는 값은 ∂f/∂z, ∂f/∂q, ∂q/∂x, ∂q/∂y이다.
먼저 ∂f/∂z를 구해보자.
f = (x+y)*z = xz + yz 이다.
이를 z에 대해 편미분하면 x+y, 즉 q가 나오는 것이다.
그 다음 ∂f/∂q를 구해보자.
f를 q에 대해 미분하면 된다.
f = (x+y) * z = q*z이므로 ∂f/∂q는 z가 되는 것이다.
마지막으로 ∂q/∂x, ∂q/∂y를 각각 구해보자.
q = x+y인데 이를 각각 x에 대해, y에 대해 편미분 하면 각각 1이 나온다.
정리해보면 ∂q/∂x = 1, ∂q/∂y = 1, ∂f/∂z = x+y = q, ∂f/∂q = z가 되는 것이다.

Global Gradient
Global Gradient는 어떤 노드까지 전달된 누적 기울기 값이다.
예를 들어 q = x+y라는 노드에 대해서는, 이 노드에 도달하기까지 전달된 값이 ∂f/∂q = z =4가 된다.
즉, 전체 네트워크를 따라 역방향으로 전달된 값이 바로 Global Gradient이다.
Local Gradient
Local Gradient는 각 노드가 가지는 자기 내부 연산의 기울기를 의미한다.
예를 들어 각각 q=x+y, f=q*z에서 ∂q/∂x = 1, ∂q/∂y = 1, ∂f/∂z = x+y = q, ∂f/∂q = z이다.
즉, 각각의 노드에서 자기 연산에 대한 미분값을 Local Gradient라고 하는 것이다.

'CS > 기계학습' 카테고리의 다른 글
| [기계학습] CNN 기초 (1) | 2025.06.13 |
|---|---|
| [기계학습] Neural Network - Deep Learning의 한계와 발전 (3) | 2025.06.12 |
| [기계학습] Neural Network - 퍼셉트론과 학습 메커니즘 (1) | 2025.06.11 |
| [기계학습] Neural Network - history (0) | 2025.06.11 |
| [기계학습] Probabilistic Model (1) | 2025.05.29 |