CS log
DL 기초 (ANN, DNN, CNN) 본문
ANN
Aritificial Neural Network, 인공신경망
사람 신경망 원리와 구조에 착안한 기계학습 알고리즘으로, 딥러닝의 기초가 됨
Perceptron
인공신경망의 기본 요소이며, 신경 세포 하나를 의미함
학습 방법 : 가중치 초기화 ➡️ 입력값과 가중치로 예측값 계산 ➡️ 예측값과 실제값 차이 계산 ➡️ 차이를 줄이도록 가중치 변경 ➡️ 반복
1) 단층 퍼셉트론 (single-layer perceptron)
입력층과 출력층으로만 구성됨(은닉층x)
한계 : XOR 게이트 구현 불가능
2) 다층 퍼셉트론(multi-layered perceptron MLP)
은닉층 존재
은닉층이 2개 이상인 신경망 -> 심층 신경망 (Deep Neural Network, DNN)
* 같은 층의 노드 수를 늘리면 어떤 효과인가?
* 층을 늘리면 어떤 효과인가?
😄 : 복잡한 비선형 관계 표현 가능, 성능 개선
☹️ : 과적합 위험, 기울기 소실 문제, 학습 시간 증가, 비효율성(특정 수준 이상은 성능이 떨어질 수 있음)
FFNN & FC layer
FFNN
feed forward neural network, 입력 노드에서 숨겨진 노드(있는 경우)를 통해 앞 방향으로만 이동. 네트워크에 순환이나 루프가 없다.
FC layer (Fully Connected layer)
각 layer에 속한 뉴런이 이전 layer의 모든 뉴런과 연결된 구조를 의미한다. 각 뉴런은 이전 layer에서 출력한 데이터를 동일하게 전달 받기 때문에 같은 입력 데이터에서 뉴런마다 서로 다른 특징을 추출한다. 이러한 사실때문에 데이터에 특징(feature)이 많을 수록 더 많은 노드가 늘어나야 그 특징들을 모두 추출할 수 있다.
각 뉴런에서 추출된 특징은 계층 단위로 출력되어 다음 layer에 전달된다.
- Input Data ➡️ Input layer(Previous layer): 데이터를 입력받음
- Input layer ➡️ Hidden layer: 데이터에서 특징이 추출되고 변환됨
- Hidden layer ➡️ Output layer: 가장 추상화된 특징을 이용하여 예측
비교!
FNN
- 순방향 전파
- 재귀적인 구조가 없음 즉, RNN에 대비되는 신경망
- RNN과 대비되어 재귀적인 구조가 없기에 Gradient값이 명확하게 정의됨
- 역전파에의해 Gradient 계산이 쉬움
FC layer
- 순방향 전파
- 입력층의 모든 노드들이 히든 레이어의 모든 노드들과 연결됨
- CNN과 대비되는 구조로, CNN은 Pooling과 Stride로 듬성듬성 연결된것과 대비된다.
Back Propagation
다층 퍼셉트론에서의 학습-최종 예측값과 실제값의 차이를 최소화하는 가중치를 찾는 것
순전파(forward propagation) | 입력층➡️출력층 | = | 예측값과 실제값 간 오차(loss) 계산 |
역전파(back propagation) | 출력층➡️입력층 | = | 경사하강법 ➡️ 가중치 업데이트 |
Overfitting problem
- 모델 성능을 떨어트리는 주요 이슈
- 훈련 데이터에 대한 정확도는 높아도, 새로운 데이터(검증/테스트 데이터)에 대해서는 제대로 동작하지 않는 문제
- 불필요할 정도로 과하게 암기해 훈련 데이터에 포함된 노이즈까지 학습한 상태
solution
1) data augmentation(데이터 증강) / 모델 복잡도 줄이기
2) dropout
- 학습 과정에서 신경망의 일부로 사용하지 않는 방법
- dropout 비율을 0.5로 한다면 학습 과정마다 랜덤으로 절반의 뉴런은 사용하지 않음
- 특정 뉴런 또는 조합에 의존하는 것을 방지
- 서로 다른 신경망들을 앙상블하여 사용하는 듯한 효과
3) regularization
복잡한 모델을 좀 더 간단하게 하는 방법
기존 cost function에 모든 가중치에 대해 regularization term 을 더함
기본적으로 cost function으로 정의된 cost를 줄이는 방향으로 학습하되, 가능하면 크기가 작은 w값을 사용할 수 있도록 함
Vanishing Gradient problem
sigmoid 함수
- vanishing gradient problem 이란? 입력값이 아무리 크더라도, 출력되는 값의 범위가 너무 좁기 때문에(0 or 1) 경사하강법 수행 시에 범위가 너무 좁아, 0에 수렴
- sigmoid 함수 출력값이 0/1에 가까워지면 기울기가 완만해짐 (주황색 구간)
- 최대 미분값이 0.25(초록색 구간)
- 역전파 과정에서 0에 가까운 값이 누적해서 곱해지게 되면서 앞단에는 gradient 값이 잘 전달되지 않음 ➡️ 학습이 잘 되지 않음
Activation function
Tanh
- 입력값을 -1~1 사이의 값으로 변환
- sigmoid처럼 -1/1에 가까울 때 기울기가 완만해진다는 문제가 있지만, 0을 중심으로 하기 때문에 최대 미분값이 1이 됨
- 미분값이 sigmoid보다 전반적으로 큼
ReLU
- f(x) = max(0,x)
- 음수를 입력하면 0을 출력하고, 양수를 입력하면 입력값을 그대로 변환
- 출력값이 특정 양수값에 수렴하지 않으며, 0 이상의 입력값의 경우에는 미분값이 항상 1
- sigmoid, tanh처럼 연산이 필요하지 않고 단순 임계값이므로 연산 속도가 빠름
- 여전히 문제점이 존재 : 입력값이 음수면 미분값이 0이 되고, 뉴런은 회생이 어려움
Leaky ReLU
- ReLU의 문제점을 보완하기 위한 변형 함수
- f(x) = max(ax,x) (a는 하이퍼파라미터)
- 입력값이 음수일 경우 0이 아니라 0.001과 같은 매우 작은 수를 반환
- leaky : 새는 정도. 일반적으로 0.01의 값을 가짐 (입력값의 음수일 때의 기울기. 입력 값이 음수일 때 출력을 0으로 고정하지 않고, 작은 기울기를 유지하는 방식)
softmax
sigmoid처럼 출력층에서 주로 사용됨 (ReLU 계열은 주로 은닉층)
sigmoid : binary classification
softmax : multiclass classification
* sigmoid는 은닉층에서도 사용된다. softmax도 사용 가능하지 않을까? 잘 사용하지 않음
softmax를 은닉층에서 사용할 수 있지만, 실용적으로는 은닉층의 역할에 부합하지 않기 때문에 거의 사용되지 않는다.
왜냐하면 은닉층에서 softmax를 사용하면, 각 뉴런의 출력을 확률 분포로 만들기 때문에 정보가 과도하게 축약될 수 있다. 또한 softmax는 각 뉴런의 출력을 다른 뉴런의 출력과 연관지어 확률로 변환하기 때문에, 은닉층에서 사용하면 출력층에서의 학습이 복잡해질 수 있다.
optimizer
GradientDescent & SGD(Stochastic GD)
- GD는 가장 기본적인 최적화 알고리즘으로, 모든 데이터를 고려해 가중치를 업데이트함
- 학습이 매우 오래 걸리며, global minimum을 찾지 못하고 local minimum에 갇힐 수 있음
- 데이터의 랜덤하게 추출한 mini batch를 사용해 GD의 문제점을 해결한 optimizer가 SGD
Optimizer의 발전
- learning rate를 수정한 optimizer : Adagrad, AdaDelta, RMSProp
- Gradient를 수정한 optimizer : momentum, NAG
- 두 장점을 모두 가진 optimizer : Adam, Nadam
Adam
: RMSProp + momemtum
각 파라미터마다 다른 크기의 업데이트를 진행함. 진행하던 속도에 관성을 주고, 학습률을 적응적으로 조정하는 알고리즘
CNN
inductive bias
"they also make strong and mostly correct assumptions about the nature of images (namely, stationarity of statistics and locality of pixel dependencies)."
stationarity of statistics : 이미지의 통계적 특성이 위치에 관계없이 일정하다는 가정
locality of pixel dependencies : 이미지에서 각 픽셀은 주로 인접한 픽셀들과 강한 관계를 가진다는 가정
inductive bias : 모델이 제한된 데이터로부터 일반화할 수 있게 해주는 편향(bias)
통계의 정상성 (stationarity of statistics), 픽셀 의존성의 국소성(locality of pixel dependencies)
❓: 두 inductive bias를 반영하려면 모델을 어떻게 구성해야할까?
➡️ translation invariance(평행 이동 불변성)와 translation equivalance(평행 이동 등가성)으로 가능케한다!
* 평행 이동 불변성 : 평행 이동 불변성은 입력이 평행 이동(translation)되더라도, 모델의 출력이 동일하게 유지되는 성질
평행 이동 등가성 : 평행 이동 등가성은 입력이 평행 이동되면, 출력 또한 동일한 크기로 평행 이동되는 성질
CNN
- Convolutional Neural Network, 합성곱 신경망
- 주로 이미지 처리에 많이 사용됨
- 일반적인 신경망 구조에 Convolution layer와 Pooling layer를 추가함으로써
- 공간적인 구조 정보를 유지하고, 이를 바탕으로 이미지 등의 2차원 데이터에서 패턴을 찾아내는 데 특화되어 있음
CNN Architecture
1) convolution layer
- convolutional 연산을 수행 : input과 filter를 convolution (합성곱, 행렬 간 연산)
- filter를 slide함으로써 주위 픽셀들을 계산해 이미지의 공간적인 구조를 보존함
- 이미지의 feature를 찾아내는 것이 filter의 목적
- 이미지를 classification하는 데 필요한 특징(feature) 정보들을 뽑아냄
- convolution의 output : feature map
2) filter
- 이미지의 특징을 찾아내기 위한 공용 파라미터 → Filter 파라미터가 CNN에서 학습의 대상이 됨
- Kernel이라고도 불림
- 일반적으로 (4, 4)이나 (3, 3)과 같은 정사각 행렬로 정의됨
- 과거에는 데이터 양이적고, 컴퓨터 성능 이슈로 아키텍처의 depth를 크게 갖지 못했기 때문에 filter size를 크게 설정할 수밖에 없었으나,
- 최근에는 그러한 제약이 사라져 filter size를 작게 & depth를 깊이하여 비선형성을 추가하고 high level의 feature를 추출하는 것이 목표가 됨
3) Stride
필터를 순회하는 간격
stride = 2 : filter가 2칸씩 이동
stride가 작을수록 출력 크기가 입력 크기와 비슷하게 유지되므로, feature map의 공간 해상도가 높아짐 ➡️ 세부적인 특징 감지 가능
stride가 클 수록 출력 크기가 입력 크기에 비해 작아지므로, feature map의 공간 해상도가 낮아짐 ➡️ 계산량 감소해 모델이 가벼워지는 효과
4) Padding
- 반복적으로 convolution 연산을 하면 feature map의 크기가 작아지는 문제 발생 + 외곽부분(모서리)에서 정보 손실 발생 (이미지의 가장자리에 값을 채워 넣는 방법)
- 일반적으로 0으로 채워넣는 zero padding을 사용함
5) Feature map (= activation map)
모델이 학습하기 위해 만든 이미지의 특징(feature)을 담은 map
출력층에 가까워질수록 원래 형태는 찾아볼 수 없고, 이미지 특징들만 전달됨
Feature map 계산하기
convolution 연산을 거친 feature map의 크기를 구하는 공식
input image size (W,H)
Filter(kernel size) F
Padding size P
Stride size S
6) Pooling layer
- feature map의 차원을 down sampling함으로써 연산량을 감소시킴
- 데이터의 공간적인 특성은 유지하며 이미지 크기를 줄일 수 있게 됨. 학습할 가중치가 줄어 과적합 문제에도 도움이 됨
- max pooling, average pooling, min pooling
WHY CNN?
1) FCNN의 한계
- 이미지를 flatten해 MLP로 학습하는 것은 가능하나, flatten하는 과정에서 이미지의 지역적 정보가 소실됨
- 이미지는 수많은 픽셀로 이루어져 있기 때문에 flatten하면 노드가 많이 필요하게 되고, 모델 사이즈가 커짐
- 이미지의 지역적 정보를 잘 살릴 수 있는 Receptive field concept를 채용한 CNN이 도입됨
2) CNN vs FCNN
CNN은 필터를 공유 파라미터(weight sharing)로 사용하기 때문에, 기존의 FCNN에 비해 추정 파라미터의 수를 대폭 줄일 수 있음
3) receptive field
- 각 filter가 배출한 하나의 결과값은 하나의 뉴런이며, 하나의 뉴런이 입력 이미지에서 담⑨하는 범위를 Receptive field라고 함
- 특정 feature map/뉴런의 활성화에 기여하는 입력 이미지의 영역
- Filter의 크기에 의해 결정되며, filter의 크기가 클수록 receptive field도 커짐
- 층이 깊어질수록 더 넓은 receptive field를 가지게 됨
- 초록색 뉴런의 receptive field: 원본 이미지의 3x3
- 노란색 뉴런의 receptive field: 원본 이미지의 5x5
- Receptive field가 작은 뉴런은 이미지의 작은 부분만 볼 수 있으며 작고 국소적인 특징에 민감함
- Receptive filed가 큰 뉴런은 이미지의 더 많은 부분을 볼 수 있고 더 크고 전역적인 특징에 민감함
➡️ 입력 데이터의 모든 특징을 한 번에 학습하지 않고, 국소적 부분을 계산하여 시간과 자원을 절약하며 이미지의 세밀한 부분까지 분석함
CNN Model
1) LeNet-5 (1998)
- MLP가 가지는 한계를 지적하며 기본적인 CNN 구조를 최초로 제안한 모델
- 손 글씨 인식을 위해 제안됨
- Conv layer 2개, FC layer 3개로 구성됨
- Padding없이 convolution을 반복 → 신경망이 깊어질수록 이미지 크기가 줄어듦
- 활성화 함수로 Sigmoid Function을 사용
2) AlexNet(2012)
- ImageNet 데이터셋을 사용하여 Classification 성능을 겨루는 대회인 ILSVRC 2012에서 우승
- Conv layer 5개, FC layer 3개로 구성됨
- ReLU 활성화 함수 사용: 기존에 사용되던 Tanh보다 빠르게 수렴하는 효과
- Dropout, Data Augmentation 사용 → 적은 데이터셋에 Overfitting 방지
- Training on Multiple GPUs: GPU 2개를 기반으로 한 병렬 구조 → 연산량 소모 문제 해결, 학습시간 줄임
- GPU1에서는 주로 컬러와 상관없는 정보를 추출하기 위한 커널 학습
- GPU2에서는 주로 컬러와 관련된 정보를 추출하기 위한 커널 학습 (⑨시 사용한 GPU인 GTX 580 3GB의 VRAM을 가지고 있는데, 하나의 GPU로 실험을 하기엔 memory가 부족해 위와 같은 구조를 가지게 되었다고 …)
3) VGG(2014)
- ILSVRC 2014에서 준우승 → 구조가 간결해서 더 많은 인기를 얻음
- Depth의 영향을 확인하고자, 이전 방식들과는 달리 비교적 작은 크기인 3x3 Conv layer를 깊게 쌓는다는 것이 VGG의 핵심
- AlexNet은 8개의 layer를 사용했지만, VGG는 11개, 13개, 16개, 19개 등 더 많은 수의 layer를 사용할 수 있었음
- 3개의 3x3 Conv layer vs. 1개의 7x7 Conv layer
- Receptive field는 같지만, 더 많은 활성화 함수를 사용해 비선형성을 얻을 수 있음
- 파라미터 수도 줄어드는 효과 (3x3x3 = 27 < 7x7 = 49)
4) GoogLeNet(inception) (2014)
reference : https://velog.io/@iissaacc/GoogLeNet
5) ResNet(2015)
- Microsoft에서 개발한 단순하면서 효과적인 구조의 모델로, ILSVRC 2015에서 우승
- Layer의 개수에 따라 ResNet-18, ResNet-34, ResNet-50, ResNet-101, ResNet-152 등 5가지 버전이 존재함
- Residual Block: 입력값에 출력값을 더하는 구조로 입력값과 출력값의 차이(residual)를 학습하는 것을 목표로 함
- 신경망이 깊어질수록 입력값과 출력값의 차이가 작아져 Gradient Vanishing Problem 해결
- Skip connection: 몇 개의 layer를 건너 뛰어 연결해 non-linearities를 추가
- 파라미터를 네트워크에 deep하게 업데이트할 수 있으며, gradient가 원활하게 흐름
'AI' 카테고리의 다른 글
EfficientNet (0) | 2024.09.26 |
---|---|
ResNet (0) | 2024.09.26 |
Decision Tree / Ensemble & Random Forest (0) | 2024.08.07 |
회귀 regression (1) | 2024.07.24 |
분류와 회귀 (1) | 2024.07.24 |