본문 바로가기
CS/ML

10주차 - ANN

by 빠니몽 2023. 12. 11.

12.10.2023

 

목차

1. From biological to Arificial Neurons

2. Implementing MLPs with Keras

3. Fine-Tuning Neural Network Hyperparameters

 

1. 생물학적 뉴런부터 인공뉴런까지

1-1. 생물학적 뉴런

신호가 만들어지면 axon을 통해 전달. 뉴런이 충분한 신호를 받으면 electrical impulse 전기충격 생성

하나 또는 여러개의 이진 인풋과 하나의 이진 아웃풋을 가짐

1-2. 퍼셉트론

가장 심플한 Artificial Neuron Network(ANN) 아키텍쳐임.

Threshold Logic Unit(TLU)라고 불리는 인공 뉴런 기반으로 만들어짐

TLU와 일반 ANN의 차이점

  1.입력을 랜덤 리얼 밸류로 받을 수 있으며

  2. 시냅스로 연결되는 axon 부분에도 웨이트 있음(리얼밸류)

기본적으로 Heaviside step function을 사용

단순 선형 이진 클래시피케이션에도 이용될 수 있음.

스레스홀드를 넘으면 파지티브 클래스, 못넘으면 네거티브 클래스를 줘서 선형 이진 클래시피케이션으로 동작 가능.

퍼셉트론이란 여러개의 TLU로 이루어진 레이어로 구성되어 있다.

 

a fully connected layer or a dense layer: 현재 레이어의 모든 뉴런이 이 전 레이어의 모든 뉴런과 연결된 레이어

출처: 강의자료; fully connected layer의 아웃풋 계산법

파이: 스텝펑션

X: 인풋

W: 인풋에 대한 웨이트

b: 바이어스에 대한 웨이트

 

출처: 강의자료; 퍼셉트론이 웨이트를 업데이트 하는 방법

Yi: 실제 아웃풋

Y^i: 프리딕션된 아웃풋

err: 실제 아웃풋과 프리딕션된 아웃풋 사이의 차이

Xi: i번째 인풋 밸류

Wij: i번째 인풋과 j번째 인풋 사이의 웨이트

에타(n): learning rate, 업데이트 된 웨이트를 얼마나 반영할지 결정

 

퍼셉트론의 한계

퍼셉트론은 각 뉴런의 디시전 바운더리가 선형이기 때문에 복잡한 패턴 학습이 불가능하다.

퍼셉트론에서 각 뉴런의 디시전 바운더리: z=xTw

 

퍼셉트론은 로지스틱 리그레션 클래시피파이어와는 다르게 클래스 프라바빌리티를 아웃풋하지 않는다.

그리고 작은 문제들을 풀 때 어려움이 있다.

1-3. MLP

여러개의 퍼셉트론을 중첩시킴으로써 단일 퍼셉트론의 한계를 극복할 수 있다는 것이 밝혀졌다 (MLP)

hidden layer: 인풋레이어와 아웃풋레이어를 제외한 모든 TLU 레이어. 이 히든 레이어가 많아질수록 딥 뉴런 네트워크가 됨

FNN(feedforward neural network): 아웃풋을 낼 때 시그널 플로우는 하나의 디렉션인 네트워크

MLP에서 히든 뉴런들은 인풋과 연결되어있고, 그 아웃풋이 다음 레이어로 전달된다. 아웃풋 레이어를 제외하고 모두 바이어스 뉴런을 가짐.

 

웨이트를 어떻게 시키느냐가 몇년동안 문제였다. 싱글 퍼셉트론일 때는 괜찮았는데 히든레이어가 끼니까 어려워짐

이 때 나온 backpropaganda라는 것이 솔루션이 됨

Backpropaganda: gradients를 자동으로 계산하게 해주는 어떠한 기술을 이용하는 Gradient Descent 방식이다

커넥션 웨이트와 바이어스 웨이트를 얼마만큼 조절해야 에러를 줄일 수 있는 지 계산한다.

최종적인 그라디언트를 계산하면 그라디언트 디센트 방식으로 컨벌지 할때까지 웨이트를 업데이트시킨다.

 

epoch: 전체 데이터를 트레이닝 시키는 횟수 (하나의 미니배치: iteration)

forward pass: 각 레이어의 결과가 다음 레이어로 보내진다. 아웃풋 레이어가 결과를 받을때까지 반복. 레이어마다 나온 결과들을 저장해줘야함. 그래야 이 결과들을 backward pass에 쓰기 때문

backward pass: 포워드패스가 끝나면 네트워크의 아웃풋 에러를 측정한다. 그 후 각 아웃풋 커넥션이 그 에러에 얼마나 영향을 끼쳤는지계산한다.(체인룰로 자동적으로 계산된다). 이전 레이어에 있던 각각의 커넥션으로부터 얼마나 많은 에러 컨트리뷰션이 왔는지 측정하고 다시 체인룰을 통해 알고리즘이 인풋레이어에 닿을때까지 반복한다.

 

히든 레이어의 커넥션 웨이트값을 랜덤으로 초기화하는 게 중요하다. 전부다 0을 주거나 대칭방향 초기화를 줘버리면 학습 절대 안됨. 모든 뉴런이 완벽하게 같아지기 때문. 뉴런이 완벽하게 같아진다는 말은 수많은 뉴런이 하나처럼 움직인다는 말과 같음. 다만 바이어스는 0으로 초기화 가능.

 

알고리즘을 더 잘 작동시키기 위해 MLP 구조에변화를 줬는데, 스텝 펑션 대신에 로지스틱 함수(시그모이드 함수)를 사용하는 것이다. 스텝펑션의 특징은 어디서 미분해서 값이 다 0이 나오는 것인데, 모든 지점에서 미분 가능하지도 않는다. 그러나 시그모이드 함수는 모든 지점에서 항상 미분 가능, 즉 항상 그라디언트가 있다.

시그모이드펑션: 1/(1+exp(-z))

백프로파게이션 알고리즘은 로지스틱 함수 뿐만이 아니라 많은 액시베이션 함수와 잘 동작한다.

 

액티베이션 함수가 필요한 이유

체인룰에서 에러/derivatives는 곱해지면서 진행 (((Xw+b)w+b)w+b)... 이걸 아무리 해봤자 결국엔 리니어 트랜스포메이션이고 

한 번 0이 나오면 모두가 다 0이 됨. 특히 인풋레이어에 가까운 레이어로 갈 수록 그라디언트가 소실되는 현상이 나타남. 그래서 액티베이션 펑션이 고안됨

 

1-4. Regression MLPs

한 번에 여러개의 값을 프리딕션하고 싶은 경우, 아웃풋 레이어의 노드 갯수를 아웃풋 디맨전과 동일하게 설정

아웃풋 뉴런에는 액티베이션 펑션을 두지 않음. 액티베이션 펑션은 특정 레인지 안에 들어가도록 설정되기 때문에. 아웃풋의 범위가 더 자유로워야하므로. 만약 양수값만 아웃풋하고 싶으면 ReLU 쓰면 됨

 

1-5. Classification MLPs

바이너리 클래시피케이션 문제라면 싱글 아웃풋 뉴런 하나만 있으면 됨. 로지스틱 쓰면 0-1로 수렴가능

소프트 백터 엑티베이션을 사용하여 합의 1이 되도록 노멀라이제이션 진행

 

2. Keras로 MLPs 구현하기

출처: 강의자료

클래스들이 exclusive하기 때문에 소프트맥스 액티베이션 펑션 사용

출처: 강의자료

 

바이너리 클래시피케이션 -> sigmoid(logistic) activation function and binary_crossentropy loss.

 

모델을 저장한다? 모델을 저장한다라는 말의 의미는 웨이트를 저장한다는 의미.

두 개의 레이어만으로도 웨이트의 갯수는 수십만개에 달하고 더 복잡한 모델은 훨씬 더 많음

그래서 모델의 사이즈가 기가바이트까지도 가기 때문에 h5(빅데이터에서 쓰는 확장자) 확장자로써 모델을 저장함

 

restore_best_weights: 에포크를 다 봤을 때 가장 성능이 좋은 지점이 트레이닝이 끝났을 때까 아닐 수 있음 이때 롤백하고싶으면 true로 설정

 

3. Fine-Tuning Neural Network Hyperparameters

뉴럴네트워크의 자유도는 하나의 단점이 될 수 있다. 너무 많은 하이퍼파라미터를 지정해주어야 하기 때문

그래서 보통은 크로스발리데이션을 통해 하이퍼파라미터를 찾는다. 이런 경우 스페이스를 정해놓고 랜덤 서치를 하던가, 짝을 정해놓고 다 해봄 (try and err)

 

히든 레이어의 갯수 정하기

하나, 두 개로 시작해서 잘 동작하지 않으면 히든레이어 갯수 늘려가기

훨씬 복잡한 문제를 위해서는 히든레이어의 갯수를 오버피팅되기 전까지만 늘려야함

데이터가 적은 경우 프리트레이닝 된 모델을 가져다 쓸 수 있음

 

각 히든 레이어당 뉴런 갯수 정하기

앞단 레이어쪽은 뒷단과 크거나 같게. 대부분의 문제들은 그냥 똑같이 해도 괜찮음.

뉴런 갯수가 많아질수록 오버피팅 될 가능성니 높아지기 때문에 차라리 최대한 크게 잡아놓고 early stopping을 하는게 현실적

 

Learning rate, batch size, and 다른 하이퍼파라미터들

최대의 절반정도가 최적의 러닝레잇이라고 볼 수 있다

옵티마이저는 알아서

액티베이션 펑션은 ReLU 쓰면 잘 됨. 태스크에 맞게 고르자

iteration 횟수는 일단 최대한 많이 잡아놓은 다음 early stopping 하는 것이 최선

배치사이즈: 정답은 없고 메모리를 최우선으로 생각해서 큰 사이즈 먼저 해보고 잘 안되면 작은거 시도

'CS > ML' 카테고리의 다른 글

11주차 - 딥 뉴럴 네트워크 학습시키기  (2) 2023.12.12
[ML] 9주차 - Dimensionality Reduction  (1) 2023.11.03
[ML] 요점정리  (1) 2023.10.25
[ML] 5주차 - SVM  (1) 2023.10.23
[ML] 4주차 - 트레이닝 모델  (1) 2023.10.22