신경망(neural networks)
- 인간의 뇌를 모방하여 만든 알고리즘으로, 데이터를 처리하고 패턴을 학습하는 데 사용
- 여러 층(layer)과 노드(node)로 구성되어 있으며, 각 노드는 입력 데이터를 가중치와 결합하여 출력을 생성함


- 선형 회귀구조를 이용해서 하나의 특성을 만들어냄
- 몇 개의 특성을 만들어내는 지는 설정하기 나름
- 더 많은 노드, 레이어 얼마든지 생성 가능 -> 레이어가 깊어지면 "딥러닝"

- 신경망을 깊이 쌓으면 쌓을 수록 어떤 데이터에 대한 정보는 많이 학습됨 -> 많은 특성을 추출 가능 => "정확한 예측"
- 주의점: 지나치게 복잡한 모델 사용으로 성능을 끌어올리는 경우 -> "과적합 문제" 발생
- 수많은 선형 변환이 여러 개로 이어져있더라도 결국 한 번에 가는 선형 변환이 존재함 => 따라서 "비선형 변환이 필요함"

- 선형변환은 입력 데이터에 가중치를 곱하고 편향을 더하는 과정
- 수학적으로는 y = Wx + b 형태로 표현
- 여기서 W는 가중치(weight), x는 입력(input), b는 편향(bias)입니다.
- 선형 변환은 데이터의 크기만 조정하거나 회전시키는 등의 단순한 변환을 수행
[중요성]
- 선형 변환은 데이터를 다루는 가장 기본적인 방법
- 하지만 혼자서는 복잡한 데이터의 패턴이나 특성을 충분히 표현하지 못함

[Sigmoid 함수]
- Sigmoid 함수는 대표적인 비선형 활성화 함수
- 함수 형태는 σ(x) = 1 / (1 + e^(-x))로 표현
- 이 함수는 입력값을 0과 1 사이의 값으로 변환함, 이는 확률과 같은 형태로 해석될 수 있음
[중요성]
- 비선형 변환은 딥러닝 모델이 복잡한 데이터의 특성을 학습할 수 있게 해줌
- Sigmoid 함수와 같은 활성화 함수는 선형 변환된 데이터에 적용되어 모델에 비선형성을 부여함


활성화 함수 (Activation Functions)
- 딥러닝 모델에서 활성화 함수는 매우 중요한 역할을 함
- 이 함수들은 인공신경망에서 입력 데이터를 받아 처리한 뒤, 출력을 결정하는 데 사용
- 주로 Sigmoid와 ReLU 함수가 널리 사용
1. Sigmoid 활성화 함수
- Sigmoid 함수는 σ(x) = 1 / (1 + e^(-x))로 정의
- 이 함수는 모든 입력값을 0과 1 사이의 값으로 변환
[특징]
- 출력이 0과 1 사이로 제한되기 때문에, 이진 분류 문제에서 유용
- Sigmoid는 곡선의 형태를 띄기 때문에, 입력값에 따른 출력의 변화가 부드러움
[단점]
- 그라디언트 소실(Vanishing Gradient) 문제가 발생할 수 있음
- 신경망이 깊어질수록 학습이 어려워진다는 것을 의미
- 출력이 0에 가까울 때와 1에 가까울 때 Gradient가 매우 작아져, 학습 속도가 느려질 수 있음
2. ReLU (Rectified Linear Unit) 활성화 함수
- ReLU 함수는 f(x) = max(0, x)로 정의
- 입력이 0 이상이면 그 입력을 그대로 출력하고, 0 미만이면 0을 출력
[특징]
- ReLU는 간단하고 계산 효율성이 뛰어나 대규모 신경망에서 널리 사용
- 그라디언트 소실 문제를 상당 부분 해결해주어 깊은 네트워크에서도 효과적으로 학습할 수 있음
[단점]
- '죽은 ReLU' 문제
- 즉, 네트워크의 일부 뉴런이 0 이하의 값만 받게 되면, 항상 0만 출력하게 되어 해당 뉴런이 더 이상 학습에 기여하지 못하는 문제가 발생
일반적으로, Sigmoid는 출력층에서 이진 분류 문제에 자주 사용, ReLU는 은닉층에서 널리 사용
가중치 행렬(weight matrix)
- 신경망에서 입력과 출력 사이의 관계를 결정하는 매개변수.
- 각 노드의 입력값에 곱해지는 가중치들의 집합으로, 학습 과정에서 최적화됨.



경사 하강법(gradient descent)
- 최적화 알고리즘의 일종으로, 손실 함수(loss function)의 최소값을 찾기 위해 가중치를 조정함
- 손실 함수의 기울기(gradient)를 계산하여 오차를 줄이는 방향으로 가중치를 업데이트함



학습률(Learning Rate)
- 딥러닝에서 매우 중요한 hyperparameter
- 이는 모델이 데이터로부터 학습하는 속도와 방식을 결정짓는 역할을 함
학습률(Learning Rate)이란?
- 학습률은 모델이 학습하는 동안 가중치(weight)를 얼마나 조정할지를 결정하는 값
- 가중치의 업데이트는 "가중치 = 가중치 - 학습률 * 손실 함수의 기울기"로 계산
- 즉, 학습률이 크면 가중치 조정이 크고, 학습률이 작으면 가중치 조정이 작음
Optimizer의 종류
경사 하강법을 개선한 다양한 알고리즘들이 있습니다. 대표적인 예로는 SGD(Stochastic Gradient Descent), Adam, RMSprop 등이 있으며, 각각의 알고리즘은 특정 상황에서 더 효과적일 수 있습니다.

SGD(Stochastic Gradient Descent)
- 작동 방식: 각 단계에서 무작위로 선택된 하나의 데이터 샘플에 대해 Gradient(기울기)를 계산하고, 이를 사용해 모델의 가중치를 업데이트함
- 장점: 메모리 효율적이며, 대규모 데이터셋에서도 잘 작동함
- 단점: 수렴 속도가 비교적 느리고, 최적점에 도달하기까지 불안정할 수 있음
Batch GD(Batch Gradient Descent)
- 작동 방식: 전체 데이터셋을 사용하여 한 번에 그라디언트를 계산함
- 장점: 안정적인 그라디언트 추정과 수렴을 제공함
- 단점: 매우 큰 데이터셋에 대해서는 계산 비용이 많이 들고, 메모리 요구량이 높음
Mini-batch GD / Single sample GD
- 작동 방식: 데이터셋을 작은 배치로 나누고, 각 배치에 대해 Graident를 계산
- 장점: SGD와 Batch GD의 장점을 결합하여 더 빠른 수렴과 효율적인 메모리 사용을 가능하게 함
- 단점: 배치 크기 선택이 중요하며, 잘못된 크기는 성능에 영향을 미칠 수 있음
Momentum
- 작동 방식: 이전 Gradient의 방향을 고려하여 현재 업데이트에 '관성'을 추가함
- 장점: 지역 최소값에서 벗어나기 쉽고, 수렴 속도가 빨라짐
- 단점: 관성 때문에 최적점을 지나칠 수 있으며, 파라미터 조정이 필요함
AdaGrad
- 작동 방식: 각 매개변수에 대해 개별적인 학습률을 적용
- 장점: 간단한 문제에서 잘 작동하며, 희소한 데이터에서 유용
- 단점: 학습률이 지속적으로 감소하여 장기적으로는 학습이 멈출 수 있음
RMSprop
- 작동 방식: AdaGrad의 단점을 개선하기 위해 과거 모든 Gradient를 똑같이 고려하지 않고, 최근 Gradient에 더 큰 가중치를 둠
- 장점: 비교적 새로운 데이터에 잘 반응하며, 다양한 종류의 문제에 잘 작동
- 단점: 여전히 하이퍼파라미터의 조정이 필요함
Adam(Adaptive Moment Estimation)
- 작동 방식: Momentum과 RMSprop의 아이디어를 결합하여, 모멘텀과 스케일링된 Gradient 모두를 고려함
- 장점: 다양한 조건에서 잘 작동하며, 특히 높은 차원의 데이터셋이나 매개변수가 많은 모델에서 효과적임
- 단점: 상대적으로 많은 메모리를 사용하며, 하이퍼파라미터 조정이 중요함
역전파(backpropagation)
- 신경망에서 출력 오차를 입력 층으로 전파하여 가중치를 조정하는 방법
- 출력층에서 발생한 오차를 역방향으로 전파하며, 각 노드의 가중치를 최적화함



[정의]
- 역전파는 딥러닝 모델을 훈련시키는 기본적인 알고리즘으로, 오차를 출력층에서 입력층으로 거슬러 올라가며 전파하는 방식
- 이 과정에서 각 층의 가중치는 오차에 기여하는 정도에 따라 조정됨
[작동 원리]
1. 먼저, 신경망은 입력 데이터에 대한 예측을 수행
2. 예측값과 실제값 사이의 오차를 계산
3. 이 오차를 기반으로, 출력층에서 시작하여 각 층의 가중치를 손실 함수의 그라디언트(기울기)에 따라 조정
- 이 과정은 신경망이 오차를 최소화하는 방향으로 학습하도록 함
소프트맥스(softmax)
- 다중 클래스 분류 문제에서 출력 레이어에 주로 사용되는 함수
- 소프트맥스 함수는 각 클래스에 대한 예측 확률을 계산하여, 가장 높은 확률을 가진 클래스를 모델의 예측으로 선택함



[작동 원리]
- 각 클래스에 대한 신경망의 출력(일반적으로 로짓이라고 함)을 받아, 이를 정규화하여 각 클래스에 속할 확률로 변환함
- 결과적으로, 모든 클래스에 대한 확률의 합이 1이 되도록 함
크로스 엔트로피(cross-entropy)
- 분류 문제에서 손실 함수로 널리 사용됨
- 모델의 예측 확률 분포와 실제 레이블의 분포 사이의 차이를 측정함
- 낮은 크로스 엔트로피 값은 모델의 예측이 정확함을 의미함




역전파 / 소프트맥스 함수 / 크로스 엔트로피 정리
- 역전파는 신경망이 오차를 줄이는 방향으로 학습하도록 도와줌
- 소프트맥스 함수는 다중 클래스 분류에서 모델의 출력을 확률로 변환함
- 크로스 엔트로피 손실은 모델의 예측이 얼마나 실제 레이블과 일치하는지를 측정함