본문 바로가기
공부/<파이썬으로 만드는 인공지능>

Ch5 딥러닝과 텐서플로

by 푸딩코딩 2023. 10. 15.
728x90
반응형

5.1 딥러닝의 등장

MLP: Multi-Layer-Perceptron 다층 퍼셉트론이 이미 등장했지만, 은닉층을 많이 추가해 신경망을 깊게 만들면 제대로 학습되지 않는 문제가 있다. 

1. 오류 역전파 알고리즘은 여러 층을 거치면서 기울기 값이 점점 작아져 입력층에 가까워지면,

변화가 거의 없는 기울기 소실 문제가 발생한다. 

2. 훈련 집합의 크기는 작은 상태 그대로인데, 추정할 매개변수는 크게 늘어 과잉 적합에 빠질 가능성이 커진다. 

 

이에 따라 딥러닝이 등장한다!!

 

 

5.2 텐서플로 개념 익히기

tensorflow 딥러닝의 친구, numpy와 호환이 된다. 

딥러닝에서는 데이터를 tensor로 표현한다. 

텐서: 딥러닝에서의 다차원 배열 구조로 특징을 담는다. 

가중치에서도 사용한다.  

404x13 텐서 -> 404개의 행, 13개의 열 행/열

 

 

5.3 텐서플로 프로그래밍 기초 

sklearn으로 딥러닝을 구현하기에는 한계가 있으므로 tensorflow를 사용한다.  

복잡한 것을 추상화하여 단순하게! 

Keras에서 mode.add(Dense(노드의 개수, 활성 함수, ...)) 꼴로 코딩할 수 있다.  

텐서플로우는 keras를 포함한다.

keras에는 models, layers, optimizers 클래스가 있다.

*optimizer: 가중치, 편향의 매개변수 조절해 손실함수를 최소화하는 방향으로 모델 업데이트하는 알고리즘
ex) adam, 경사하강법, momentum 등  

 

Dense 클래스는 노드들을 완전연결한다. 

 

머신러닝의 디자인 패턴

데이터 읽기-모델 생성- 모델 학습- 예측 - 성능 평가 

 

 

5.4 텐서플로로 다층 퍼셉트론 프로그래밍

x값은 x_train=x_train.astype(np.float32)/255.0 정규화하고,

y값은 y_train=tf.keras.utils.to_categorical(y_train, 10) 으로 원핫 인코딩으로 변환했다. 

 

 

 

5.5 깊은 다층 퍼셉트론(DMLP)

다층 퍼셉트론은 입력층-은닉층-출력층으로 구성되어, L층이면 L-1개의 은닉층을 가진다. 입력층은 특징 벡터의 요소 개수에 따라 d개의 노드를 가지고, 출력층은 부류 개수에 따라 c개의 노드를 가진다. 

은닉층에서는 ReLU를 주로 활성 함수로 사용하고, 출력층에 해당하는 L층에서는 주로 tanh 시그모이드 또는 로지스틱 시그모이드, softmax 함수를 사용한다. softmax는 노드를 모두 더하면 1이 되기에 확률로 간주하기 적합해 딥러닝에서 자주 사용된다. 

 

손실함수는 최적의 weight를 찾는다. 손실함수의 최저점을 찾는다. 

 

차수가 높아지면 데이터가 적어지기에 과잉적합 가능성이 커진다. 데이터 양을 늘리면 해소될 수 있다. 

 

 

5.6 딥러닝의 학습 전략

기울기 소실 문제: 왼쪽으로 진행하면서 점점 기울기가 기하급수적으로 작아져 가중치의 갱신이 더뎌짐. 따라서 전체 신경망 학습이 느려져 수렴에 도달하지 못하는 문제.

-> 병렬처리: 더 빠른 컴퓨터를 사용한다. 

-> ReLU 함수 사용

 

과잉적합: 모델이 데이터에 대해 너무 과도하게 적응하여 실제 모델 사용시 일반화가 어려운 문제.

-> 데이터 양을 늘려 해결 가능하나

-> 비용이 많이 들기에 데이터 증대 방법을 사용한다. 

-> 조기 멈춤, 가중치 감쇠, 드롭아웃,앙상블 등 규제 기법 사용 

 

*회귀는 연속적인 값을 가지는 것, 분류는 레이블이 이산인 경우. 

 

5.7 딥러닝이 사용하는 손실 함수 

인공지능 모델의 예측값과 정답의 오차를 구하는 함수 

 

평균제곱오차: MSE, 추정된 값과 정답의 오차를 구하는 방식 

e=||y-o||^2 , (정답-예측값)의 제곱

 

교차 엔트로피:  교차 엔트로피는 두 확률 분포가 다른 정도를 측정한다. 무작위성, 불확실성이 클 수록 엔트로피는 크다. 공정한 주사위 2개는 교차 엔트로피가 작고, 공정한 주사위와 찌그러진 주사위의 교차 엔트로피는 크다. 교차 엔트로피를 손실 함수로 사용한다. MSE의 불공정성 문제를 해결할 수 있으며, 딥러닝에서 주로 사용하는 방식이다.

 

파이썬 코드에서 tensorflow에서는 손실 함수를 loss=',,,' 부분에 입력하여 사용할 수 있다. 

 

 

5.8 딥러닝이 사용하는 옵티마이저

신경망 학습은 손실 함수의 최저점을 찾아가는 과정이다. 

옵티마이저: optimizer, 가중치, 편향의 매개변수 조절해 손실함수를 최소화하는 방향으로 모델 업데이트하는 최적화 알고리즘. (최소값을 잘 찾아가게 하는 것 )

ex) SGD(경사 하강법), 모멘텀, 적응적 학습률

 

모멘텀: 이전 미니배치에서 누적된 방향 벡터 v를 사용

적응적 학습률 옵티마이저: 학습률p라는 하이퍼 매개변수를 가져 최저점에 대한 방향성을 보존한다. ex) Adam(많이 사용) 

 

optimizer='....' 부분에 입력하여 사용한다. 

 

 

5.9 좋은 프로그래밍 스킬 

...

 

5.10 교차 검증을 이용한 하이퍼 매개변수 최적화 

여러 번 반복하고 평균을 취하는 것 , 하지만 시간이 많이 걸린다. 

이유: 데이터셋이 큼, 하이퍼 매개변수가 매우 많음. 

시간이 너무 많이 걸린다면, GPU를 이용하거나 적당히 타협해서 시간을 줄일 수 있음. 

 

 

 

728x90
반응형