MS AI school 6기

[Microsoft AI School 6기] 2/6(32일차) 정리 - 매개변수 갱신(optimizer, 초기값), Overfitting 해결, CNN

parkjiyon7 2025. 2. 6. 17:58

파이썬으로 배우는 딥러닝(Deep Learning)

 

 

학습관련 기술들

 

 

매개변수 갱신

 

실습 - 각 Optimizer를 활용하여 MNIST 데이터 학습시 최적화를 수행하는 프로그램 구현

 

라이브러리 import

 

라이브러리

 

mnist 데이터 읽기

 

데이터 일기, 하이퍼 파라미터 설정

 

실험용 설정

 

실험용 설정

 

optimizer 불러오기, layer 설정 등

 

훈련 시작

 

훈련

 

각 모델 별로 학습

 

그래프 그리기

 

그래프 그리기

 

SGD의 학습 진도가 가장 느리고, 나머지 세 법의 진도는 비슷하다는 것을 알 수 있다.

iteration 수를 증가시키면 아래와 같은 결과를 얻을 수 있다

 

그래프

 

가중치의 초기값

 

가중치의 초기값 설정

-> 여태까지 실습은 random 값으로 설정

 

- 초기값을 0이나 균일한 값으로 설정할 경우

  • 학습이 올바로 이뤄지지 않음
  • 오차역전파법에서 모든 가중치의 값이 똑같이 갱신되기 때문

-> 가중치의 대칭적인 구조를 무너뜨리기 위해 초깃값을 무작위로 설정해야 함

 

- 가중치를 표준편차1인 정규분포로 초기화할때 각 층의 활성화 값 분포

 

권진욱 강사님 강의 자료

 

너무 적은 범위 내에 값이 몰려 있음

Vanishing Gradient 문제 발생

이유: Sigmoid 활성화 값들이 0과 1에 치우쳐 있어서 미분값은 0에 다가가기 때문

 

- 가중치를 평균이 0, 표준편차0.01인 정규분포로 초기화

표준편차를 줄이니 가운데에 값이 몰림 -> 표현력이 작아짐

 

권진욱 강사님 강의 자료

 

권진욱 강사님 강의 자료

 

즉, 단일 망과 똑같아짐

 

- Xavier 초기값 : 각 층의 활성화 값들을 광범위하게 분포시키는 것이 목표

-> 층이 깊어지면서 넓게 분포됨.

샘플의 수가 많으면 표준편차를 크게 만들어줌

  • 각 층에 흐르는 데이터는 적당히 퍼져있음.
  • 시그모이드 함수 표현력에 제한받지않고
  • 학습이 효율적으로 이루어질 수 있음.

 

권진욱 강사님 강의 자료

 

- He 초기값

xavier 초기값의 경우

-> ReLU 함수에서는 문제가 생김

-> *2를 해줌

 

권진욱 강사님 강의 자료

 

-> 각 층의 출력 값들이 적절한 분포를 가지도록 보장해, vanishing gradient 또는 exploding gradient 문제를 완화

 

 

실습 - 가중치의 초기값과 활성화 함수를 변 경해가며 가중치의 히스토그램을 확인 하는 프로그램을 구현

 

코드를 작성하여 보면 다음과 같다

 

코드

 

1) sigmoid함수, 가중치 초기값이 표준편차 1

 

sigmoid함수,  가중치 초기값이 표준편차 1

 

2) sigmoid함수, 가중치 초기값이 표준편차 0.01

 

sigmoid함수,  가중치 초기값이 표준편차 0.01

 

3)  sigmoid함수, 가중치 초기값이 Xavier 초기값

 

sigmoid함수,  가중치 초기값이 Xavier 초기값

 

4)  sigmoid함수, 가중치 초기값이 He 초기값

 

sigmoid함수,  가중치 초기값이 He 초기값

 

다른 함수에 대해서도 정리하면 다음과 같다

 

히스토그램

 

 

실습 - 표준편차 0.01, Xavier, He 초기값 각각 에 대해 학습속도를 측정

 

SGD에서 초기값 비교

 

라이브러리 import

 

라이브러리

 

데이터 읽어오기 및 실험용 설정

 

데이터 읽어오기 및 실험용 설정

 

xavier가 초기값일때는 sigmoid를 활성화 함수로 쓰고 He일때는 relu를 사용

 

훈련

 

훈련

 

그래프 그리기

 

그래프 그리기

 

 

MNIST 데이터셋으로 본 가중치 초기값 비교

층별 뉴런수 100개, 5층 신경망, ReLU 활성화 함수

  • std 0.01 일때 -> 학습이 전혀 이뤄지지 않음.
  • 활성화 값의 분포처럼 순전파때 너무 작은 값으로 흐르고 역전파때 기울기가 작아져 가중치가 거의 갱신되지 않음.
  • He/Xavier -> 학습이 순조롭게 이루어짐
  • He --> Xavier 대비 학습 진도가 더 빠름

 

초기값에 따른 학습 비교

 

 

배치 정규화

 

배치 정규화 알고리즘

기본 아이디어 : 각 층에서의 활성화 값이 적당히 분포되도록 조정하는 것. 입력값 평균 0, 분산 1로 조정

 

권진욱 강사님 강의 자료

 

  • 미니배치 m개의 입력 데이터 집합의 평균과 분산 
  • 활성화 함수 입력값의 정규화 
  • 최종 출력시 γ 는 확대, β는 이동을 담당 
  • γ와 β는 최적의 성능을 낼 수 있도록 학습 과정에서 머신이 조정함

배치 정규화의 계산 그래프 : 역전파 방법으로 dr과 db를 학습한다

- 입력값의 배치를 조절

 

배치 정규화의 효과 

  • 학습 속도 개선 
  • 초기값에 크게 의존하지 않음
  • 오버피팅 억제

권징욱 강사님 강의 자료

 

 

바른 학습을 위해

 

오버피팅(Over-fitting) 현상

훈련 데이터에만 너무 적응해 버려서 시험데이터에 제대로 대응하지 못하는 현상

 

매개변수에 비해 상대적으로 훈련 데이터 수가 적을때 발생함

- 편향되어 학습

 

ex)

  • MNIST 데이터셋 60,000개중 훈련데이터로 300개만 사용
  • 7층 네트워크를 사용하여 네트워크 복잡성 증가시킴 
  • 각 층의 뉴런은 100개, 활성화 함수 ReLU 사용
  • 학습데이터 성공률은 높으나 테스트데이터 성공률이 지나치게 낮게 나옴

-> train과 테스트의 차이가 크다

 

오버피팅(Over-fitting) 억제 : 가중치 감소(Weight decay)

학습과정에서 큰 가중치에 대해서는 그에 상응하는 큰 페널티 부여하여 오버피팅 억제

 

 

실습 - 가중치 감소를 적용한 신경망으로 학습 및 테스트를 구현

 

코드

 

라이브러리 및 데이터 설정

 

가중치 감소 설정

 

가중치 감소 설정 및 레이어 설정

 

훈련

 

훈련

 

그래프

 

그래프 λ = 0.1

 

train과 test가 유사해야 함

유사하면 과적합을 피했다고 할 수 있음

- 학습데이터의 수가 작아 편향된 결과가 나올 수 있음

-> 기울기 값을 적게 반영

학습과정에서 큰 가중치에 대해서는 그에 상응하는 큰 페널티 부여하여 오버피팅 억제

 

decay 값을 조절하여 억제 정도를 조절할 수 있다

 

가중치 감소(Weight decay) λ = 0.13

 

- L2 정규화 (L2 Regularization)와 동일한 개념으로 설명

- 는 가중치 감소 계수(weight decay coefficient)로, 얼마나 가중치에 패널티를 부여할지를 결정

- λ 값이 커지면 페널티가 커지는 것. 즉, 가중치가 더 강하게 제한 받는 것

- λ 값이 너무 작으면 과대 적합(제한이 적음), 크면 과소적합 우려

 

 

실습 - 드롭아웃을 적용한 신경망으로 학습 및 테스트를 구현

 

오버피팅(Over-fitting) 억제 : 드롭아웃(Drop-out)

훈련 때 은닉층의 뉴런을 무작위로 골라 삭제하는 방법. 즉, 신호를 전달하지 않음

 

권진욱 강사님 강의 자료

 

- 모델의 복잡도를 줄여 과적합 방지

 

코드

 

드롭아웃 유무와 비율 설정

 

드롭아웃 비율은 각 hidden layer 별로 0.2씩 제거한다는 뜻

 

네트워크 수정

 

결과

 

그래프 그리기, dropout = 0.2

 

dropout을 조절하여 layer의 수를 정할 수 있다

 

dropout = 0.15

 

Parameter vs. Hyperparameter

 

Parameter

  • 데이터를 통해 머신이 학습하는 값
  • 예를 들어 가중치, 편향, Scaling, Shift 가 있음.
  • 데이터가 많고 신경망 모델이 좋으면 최적의 값을 머신이 스스로 찾아냄

ex) weight, bias: 인간이 세팅하는 값이 아니라 머신이 최적의 값을 찾아냄

 

Hyperparameter

  • 사람이 결정하는 값
  • 예를 들어, 층의 개수, 뉴런의 개수, 학습률, 손실함수의 종류, 배치 크기, 훈련회수, Optimizer의 종료와 관련 계수값, 가중치 초기값, 가중치 감소 계수, Dropout비율 등
  • 좋은 값을 찾기 위해서는 여러 값을 직접 시도해보는 수 밖에 없음.
  • 일부 Hyperparameter는 특정 값이 추천되거나 거의 고정되어 있는 경우도 있음.

예. Momentum계수(0.9), Adam(베타1, 베타2) 등

-> 직접 찾아내는 방법으로 사용, 추천 값이 있는 지 검색 먼저 해보는 것을 추천

 

1) Hyperparameter는 중요도 차이가 큼 -> 격자 보다는 무작위 선택이 나음

 

권진욱 강사님 강의 자료

 

2) 성능이 가장 좋은 조합 주위의 영역을 줌인해서 다시 선택함

 

권진욱 강사님 강의 자료

 

 

합성곱신경망(CNN)

 

전체 구조

 

기존 DNN의 문제점

  • 기존 DNN은 1차원 형태의 데이터를 사용함 
  • 이미지 데이터(2차원) : 1차원으로 표현할 경우 인접 영역 상관관계가 손실됨

- 인접한 픽셀들이 모여 이미지의 각 부분을 표현하나, 한 줄로 늘어뜨린 1차원 데이터에서는 상관관계가 제거됨

- 1차원 Pixel array로는 2차원 이미지의 상관관계가 소실됨

 

합성곱신경망(CNN) 전체구조

- CNN : 이미지 데이터의 공간적 상관관계를 유지하며 이미지내 특징 추출 가능

- Convolution+Pooing+Flatten : 이미지의 공간적 상관관계를 유지하며 일렬로 배열함

 

권진욱 강사님 자료

 

사각형으로 데이터 추출(일렬x)

- 입력 데이터를 공간 데이터가 살아있는 것으로 함

- 항상 마지막에는 fully connected layer로 끝남

 

기존 FCL(Fully Connected Layer)으로 이뤄진 네트워크의 예

 

권진욱 강사님 자료

 

CNN으로 이뤄진 네트워크의 예 : Convolution 계층과 Pooling 계층이 새로 추가됨.

 

권진욱 강사님 강의 자료

 

convertional layer: 상관관계를 담은 레이어

 

 

합성곱 계층

 

Convolution(합성곱) 연산

이미지 위에 필터를 이동시키면서 겹치는 부분의 원소별 곱셈의 합을 구하는 연산

 

권진욱 강사님 강의 자료

 

CNN 이미지의 합성곱 : 이미지 위에서 필터(filter)를 이동시키면서 겹치는 부분의 원소별 곱셈의 합 연산

데이터와 필터의 합성곱으로 Feature map 생성

 

권진욱 강사님 강의 자료

 

데이터를 압축하는 형태로 진행

- 가장 자리 데이터는 중복적으로 압축이 발생하지 않음

 

Padding

이미지 주변을 특정값으로 채우는 것. 가장자리 데이터의 영향력을 중앙부와 비슷하게 유지 목적

 

권진욱 강사님 강의 자료

 

가장자리를 늘려 중복하여 가장자리 데이터도 학습할 수 있게 함

 

Stride

Filter가 이동하는 보폭(Step)의 크기. Stride에 따라 피처맵의 크기와 학습속도가 달라짐

 

권진욱 강사님 강의 자료

 

Padding과 Stride를 활용한 행렬의 합성곱

 

filter

 

filter: 4*4

padding:2

stride = 1

 

3차원 텐서의 합성곱

3차원 합성곱 연산에서 주의할 점은 입력 데이터의 채널와 필터의 채널수가 동일해야 한다는 것

 

3차원의 합성곱

 

필터도 여러 장 있음, 필터의 갯수 만큼 결과 값이 생긴다.

 

권진욱 강사님 강의 자료

 

필터의 학습

역전파 알고리즘을 사용하여 입력 데이터와 연결된 필터의 가중치를 학습함

loss 값에 따라 필터를 학습함

 

권진욱 강사님 강의 자료

 

random 생성 후 loss 에 따라 학습하여 보정

 

실습 - Filter의 학습전과 후를 비교하는 코드를 구현

 

엠니스트를

- 필터로 이미지의 특징을 압축 -> 특정한 패턴을 갖는 필터를 만들어 입력된 데이터를 분석

필터는 데이터(주로 이미지)에서 중요한 특징을 찾음

 

코드

 

코드

 

학습 전 필터

 

학습 후 필터

 

학습이 진행되면서, 신경망은 역전파(backpropagation)를 통해 입력 데이터에서*특징(feature)을 추출하는 방법을 학습

학습된 필터는 이미지 데이터에서 경계(edge), 모서리, 텍스처(texture) 등 특정 패턴을 감지하도록 조정

- 필터는 특징을 추출(ex) 사람이면 안경)

 

 

풀링(Pooling) 계층

 

Pooling

 

Pooling : 피처맵을 대표하는 값으로 압축함(sub sampling)

피처맵에서 필터 크기를 바탕으로 최대값이나 평균값을 취함

- 보통 최대값을 취함

 

pooling

 

필터의 크기가 2인 Pooling layer :

- 피처맵의 크기를 1/4 로 축소

- 피처맵의 개수는 변함 없음

 

pooling

 

Convolution layer : 지역 정보 추출

Pooling layer : 지역정보 중 두드러진 정보 추출

- 필터 크기로 나누어 최대값을 취함

-> 숫자가 높을수록 필터와 매핑되는 부분이 많음

 

합성곱층 vs Max pooling층

 

합성곱층 vs Max pooling층

 

 

합성곱/풀링 계층 구현하기

 

합성곱 신경망의 구현

  • 합성곱층과 max pooling층이 반복되다가 후반에 fully connected layer가 등장함
  • 합성곱층의 필터들은 학습 시작전에 랜덤하게 생성함 
  • 데이터를 통한 학습을 통해 손실함수값을 낮추도록 필터를 훈련시킴
  • 충분한 학습이 이루어지면 낮은 층의 필터는 저수준의 로컬한 특징을 찾아내고 층이 높아질수록 더 고수준의 더 글로벌한 특징을 찾아낸다

신경망 구형

 

convolution: 특징 학습

maxpooling: 압축

-> 이를 반복하다가 fully connected에 넣어서 학습

 

 

실습- CNN 클래스로 학습 및 검증을 구현

 

코드

 

라이브러리 및 데이터 설정

 

학습

 

그래프 결과

 

여기에서 하이퍼 파라미터를 바꿔가며 모델의 성능을 높일 수 있다

 

하이퍼 파라미터 변경

 

그래프

 

 

오늘의 간단한 후기

 

배우는 내용이 너무 많고 사실 개념도 어려워서 따라가는 데에 버거움이 있지만, 강사님이 질문에 항상 친절히 대답해주셔서 수업에 잘 따라갈 수 있다는 것이 좋은 것 같다. 또한, 여러 가지 파라미터들을 직접 살펴보고 바꾸면서 모델 성능의 변화를 보는 것도 공부에 도움이 많이 되는 것 같다

 

 

 

출처

 

[1] TensorFlow Blog, "A Guide to Convolution Arithmetic for Deep Learning," *TensorFlow*, https://tensorflow.blog/a-guide-to-convolution-arithmetic-for-deep-learning/ (accessed Feb. 6, 2025).

[2] SMCHO, "CNN의 구조와 활용," *Tistory*, https://smcho1201.tistory.com/m/42 (accessed Feb. 6, 2025).

[3] Keeper, "딥러닝 기본 개념 정리: CNN과 합성곱 연산," *Tistory*, https://keeper.tistory.com/5?pidx=2 (accessed Feb. 6, 2025).

[4] Oculus, "합성곱 신경망(CNN) 개념과 구현," *Tistory*, https://oculus.tistory.com/10 (accessed Feb. 6, 2025).

[5] Dambaekday, "합성곱 신경망(CNN) 기본 구조와 사용," *Tistory*, https://dambaekday.tistory.com/3 (accessed Feb. 6, 2025).

 

-If any problem for references, or any questions please contact me by comments.

-This content is only for recording my studies and personal profiles

 

일부 출처는 사진 내에 표기되어 있습니다

본문의 내용은 학습과 개인 profile 이외의 다른 목적이 없습니다

출처 관련 문제 있을 시 말씀 부탁드립니다

상업적인 용도로 사용하는 것을 금합니다

본문의 내용을 Elixirr 강의자료 내용(권진욱 강사님)을 기반으로 제작되었습니다

깃허브 소스코드의 내용을 담고 있습니다

강의 커리큘럼이 '밑바닥부터 시작하는 딥러닝' 교재를 바탕으로 제작되었습니다

본문의 내용은 MS AI School 6기의 강의 자료 및 수업 내용을 담고 있습니다

반응형