ReLU = Rectified Linear Unit
모델이 아니라 활성화 함수이다.
공식:
ReLU(x) = max(0, x)
규칙:
예:
NumPy에서는:
np.maximum(0, x)
예:
np.maximum(0, 2)
→ 0과 2 중 큰 값인 2 반환
신경망에서는 보통:
z = np.sum(x * w) + b
output = np.maximum(0, z)
처럼 사용한다.
둘 다 활성화 함수이다.
ReLU
Sigmoid
예:
개 / 고양이처럼 둘 중 하나 판단
→ Sigmoid 사용 가능
여러 클래스 중 하나 선택
→ 보통 Softmax 사용
특정 함수 하나의 이름이 아니라, 신경망에서 같은 역할을 하는 함수들을 묶어서 부르는 말이다.
뉴런은 먼저:
z = wx + b
를 계산하고,
그 결과를 활성화 함수에 넣는다.
a = f(z)
흐름:
입력 x
→ 가중치 w 곱하기
→ bias b 더하기
→ z 계산
→ 활성화 함수
→ 출력
활성화 함수가 중요한 이유는 신경망에 비선형성을 넣기 위해서이다.
활성화 함수가 없으면 층을 많이 쌓아도 결국 단순한 선형 계산과 비슷해진다.
아니다.
데이터 전체가 없어지는 것이 아니라, 해당 뉴런의 출력값만 0이 된다.
예:
뉴런 A → 3.2 → ReLU → 3.2
뉴런 B → -1.5 → ReLU → 0
뉴런 C → 0.8 → ReLU → 0.8
즉 그 순간 특정 뉴런의 신호만 꺼지는 것에 가깝다.
계속 음수만 나와 항상 0이 되는 뉴런이 생기는 현상은 Dying ReLU라고 한다.
Tensor는 원래 수학적인 개념이다.
쉽게 말하면 다차원 숫자 배열이다.
딥러닝 라이브러리들이 이 개념을 실제 자료형으로 구현해 놓았다.
파이썬 기본 자료형에는 Tensor가 없다.
예:
Python
[1, 2, 3]
→ list
NumPy
np.array([1, 2, 3])
→ ndarray
PyTorch
torch.tensor([1, 2, 3])
→ torch.Tensor
둘 다 다차원 배열을 표현할 수 있다.
ndarray
Tensor
입문 수준에서는:
ndarray = 일반 계산용 다차원 배열
Tensor = 딥러닝 기능이 붙은 다차원 배열
이라고 생각하면 된다.
서로 다른 자료형이다.
PyTorch:
torch.Tensor
TensorFlow:
tf.Tensor
바로 완전히 섞어 사용하는 것은 어렵다.
보통:
PyTorch Tensor
→ NumPy ndarray
→ TensorFlow Tensor
처럼 변환해서 사용한다.
torch.zeros(3)
출력:
tensor([0., 0., 0.])
여기서:
0 = 정수
0. = 실수
0.0 = 실수
즉 0.은 0.0과 같은 의미이다.
torch.zeros()의 기본 자료형이 보통 float32이기 때문에 이렇게 표시된다.
Gradient = 기울기, 미분값
신경망에서는:
"가중치를 어느 방향으로 얼마나 바꾸면 loss가 줄어드는가?"
를 알려주는 값이다.
예:
loss = w²
이면
gradient = 2w
현재 w = 3이면:
gradient = 6
이 gradient를 보고 optimizer가 weight를 수정한다.
기본 형태:
새 weight
= 기존 weight - learning rate × gradient
흐름:
Tensor
→ 모델 계산
→ Loss 계산
→ backward()
→ Gradient 계산
→ Optimizer
→ Weight 수정
Optimizer는 gradient를 이용해서 실제로 weight를 수정하는 알고리즘이다.
정리:
Gradient
→ 어디로 움직여야 하는지 알려줌
Optimizer
→ 그 정보를 이용해 실제 weight를 수정함
대표적으로 SGD, Adam 등이 있다.
0차원 → Scalar(스칼라)
3
1차원 → Vector(벡터)
[1, 2, 3]
2차원 → Matrix(행렬)
[[1, 2],
[3, 4]]
3차원 이상 → Tensor라고 흔히 부름
하지만 엄밀하게는:
스칼라 = 0차원 Tensor
벡터 = 1차원 Tensor
행렬 = 2차원 Tensor
즉 전부 Tensor이다.
shape은 각 차원의 크기를 나타낸다.
[1, 2, 3]
→ 1차원
→ 원소 3개
읽는 법:
"길이가 3인 1차원 텐서"
(3,)에서 쉼표는 파이썬에서 원소 하나짜리 tuple을 표현하기 위한 것이다.
[
[1, 2, 3],
[4, 5, 6]
]
→ 2차원
→ 2행 3열
3차원 텐서이다.
의미:
큰 덩어리 2개
→ 각 덩어리에 3개
→ 각 줄에 숫자 4개
즉:
2 × 3 × 4 = 총 24개 원소
핵심:
shape 안의 숫자 개수 = 차원 수
(3,) → 1차원
(2, 3) → 2차원
(2, 3, 4) → 3차원
각 숫자 = 해당 차원의 크기
이런 식은 불가능:
(2, , 4)
각 차원의 크기가 정해져 있어야 한다.
하지만 reshape에서는 -1을 사용할 수 있다.
x.reshape(2, -1, 4)
-1 의미:
"이 차원의 크기는 전체 원소 수에 맞춰 자동으로 계산해줘"
예를 들어 원소가 24개이면:
2 × ? × 4 = 24
따라서:
? = 3
결과 shape:
(2, 3, 4)
Feature Space = 특징 공간
데이터를 여러 특징값으로 표현했을 때 만들어지는 공간이다.
예:
사람을
두 특징으로 표현하면:
사람 A = (170, 60)
사람 B = (180, 80)
이 데이터들은 2차원 공간의 점으로 표현된다.
이 키 × 몸무게 공간 전체가 feature space이다.
특징이 3개면 3차원 feature space
특징이 100개면 100차원 feature space
한 줄 정리:
Feature Space = 데이터를 특징값으로 좌표화해서 펼쳐놓은 공간