본문 바로가기
딥러닝

[딥러닝] 혼자 공부하는 머신러닝 + 딥러닝 | Chapter 07. 딥러닝을 시작합니다 |

by Hessedist 2022. 5. 18.

Chapter 07. 딥러닝을 시작합니다


학습목표

  1. 딥러닝의 핵심 알고리즘인 인공 신경망을 배움
  2. 대표적인 인공 신경망 라이브러리인 텐서플로 케라스를 소개
  3. 인공 신경망 모델의 훈련을 돕는 도구를 익힘

 


Chapter 07. 딥러닝을 시작합니다 - 1) 인공 신경망


딥러닝과 인공 신경망 알고리즘을 이해하고 텐서플로를 사용해 간단한 인공 신경망 모델을 만들어 봄.

 

인공 신경망 모델로 성능 향상

  • 이 절에서는 28*28 크기의 흑백 이미지로 저장된 패션 아이템 데이터셋인 패션 MNIST 데이터셋을 사용했음. 먼저 로지스틱 손실 함수를 사용한 SGDClassifier 모델을 만들어 교차 검증 점수를 확인함. 
  • 그 다음 가장 인기있는 딥러닝 라이브러리인 텐서플로케라스 API를 소개하고 케라스를 사용해 간단한 인공 신경망 모델을 만들어 패션 아이템을 분류해 보았음. 이 간단한 인공 신경망은 사실상 앞에서 만든 경사 하강법을 사용한 로지스틱 회귀 모델과 거의 비슷함. 하지만 몇 가지 장점 덕분에 조금 더 높은 성능을 냈음. 이에 대해서는 다음 절에 이어서 설명.
  • 인공 신경망 모델을 만들면서 이전 장에서 배웠던 로지스틱 손실 함수와 크로스 엔트로피 손실 함수를 다시 되새겨 보았음. 그리고 신경망에서 이런 손실 함수를 어떻게 계산하는지 그림을 통해 배웠음. 이 과정에서 원-핫 인코딩을 배웠고 케라스 API에 대해 조금 더 자세히 알 수 있었음. 
  • 다음 그림에서 사이킷런의 SGDClassifier와 케라스의 Sequential 클래스 사용법의 차이를 그림으로 정리. 

  • 전체 소스 코드
 

7-1 인공 신경망.ipynb

Run, share, and edit Python notebooks

colab.research.google.com

 

 

키워드로 끝내는 핵심 포인트

  • 인공 신경망은 생물학적 뉴런에서 영감을 받아 만든 머신러닝 알고리즘임. 이름이 신경망이지만 실제 우리 뇌를 모델링한 것은 아님. 신경망은 기존의 머신러닝 알고리즘으로 다루기 어려웠던 이미지, 음석, 텍스트 분야에서 뛰어난 성능을 발휘하면서 크게 주목받음. 인공 신경망 알고리즘을 종종 딥러닝이라고도 부름
  • 텐서플로는 구글이 만든 딥러닝 라이브러리로 매우 인기가 높음. CPU와 GPU를 사용해 인공 신경망 모델을 효율적으로 훈련하며 모델 구축과 서비스에 필요한 다양한 도구를 제공함. 텐서플로 2.0부터는 신경망 모델을 빠르게 구성할 수 있는 케라스를 핵심 API로 채택하였음. 케라스를 사용하면 간단한 모델에서 아주 복잡한 모델까지 손쉽게 만들 수 있음. 
  • 밀집층은 가장 간단한 인공 신경망의 층임. 인공 신경망에는 여러 종류의 층이 있음. 밀집층에서는 뉴런들이 모두 연결되어 있기 때문에 완전 연결 층이라고도 부름. 특별히 출력층에 밀집층을 사용할 때는 분류하려는 클래스와 동일한 개수의 뉴런을 사용함. 
  • 원-핫 인코딩은 정숫값을 배열에서 해당 정수 위치의 원소만 1이고 나머지는 모두 0으로 변환함. 이런 변환이 필요한 이유는 다중 분류에서 출력층에서 만든 확률크로스 엔트로피 손실을 계산하기 위해서임. 텐서플로에서는 'sparse_categorical_entropy' 손실을 지정하면 이런 변환을 수행할 필요가 없음. 
  • TensorFlow
    • Dense는 신경망에서 가장 기본 층인 밀집층을 만드는 클래스 
    • Sequential은 케라스에서 신경망 모델을 만드는 클래스
    • compile()은 모델 객체를 만든 후 훈련하기 전에 사용할 손실 함수측정 지표 등을 지정하는 메서드
    • fit()은 모델을 훈련하는 메서드
    • evaluate()는 모델 성능 평가하는 메서드

 


Chapter 07. 딥러닝을 시작합니다 - 2) 심층 신경망

 


인공 신경망에 층을 여러 개 추가하여 패션 MNIST 데이터셋을 분류하면서 케라스로 심층 신경망을 만드는 방법을 자세히 배움. 

 

케라스  API를 활용한 심층 신경망

  • 이번 장에서 여러 개의 층을 추가하여 다층 인공 신경망을 만드는 방법을 터득했음. 특별히 이런 인공 신경망을 심층 신경망이라고 부름. 또 케라스 API를 사용하여 층을 추가하는 여러 가지 방법을 알아보았음. 
  • 케라스 모델의 정보를 요약해주는 summary() 메서드를 사용해봄. 출력값의 의미를 이해하고 모델 파라미터 개수를 계산해 맞추어보았음. 모델 파라미터 개수를 계산하는 과정은 모델을 올바르게 이해하고 있는지 확인하는 좋은 방법 중 하나. 
  • 은닉층에 적용한 시그모이드 활성화 함수 대신에 새로운 렐루 활성화 함수에 대해 배웠고 이를 정용해 약간의 성능을 향상시켰음. 또한 다양한 고급 경사 하강법 옵티마이저들을 적용하는 방법도 살펴보았음. 케라스 API를 사용하면 이런 작업이 어렵지 않고 직관적으로 구성할 수 있음. 
  • 이번 절에서 인공 신경망에 대해 조금 더 깊게 살펴보았음. 다음 절에서는 훈련한 인공 신경망 모델을 저장하고 복원하는 과정을 살펴보겠음. 이 과정에서 텐서플로와 케라스에서 제공하는 다양한 도구를 배울 수 있었음. 
  • 전체 소스 코드
 

7-2 심층 신경망.ipynb

Run, share, and edit Python notebooks

colab.research.google.com

 

키워드로 끝내는 핵심 포인트

  • 심층 신경망은 2개 이상의 층을 포함한 신경망임. 종종 다층 인공 신경망, 심층 신경망, 딥러닝을 같은 의미로 사용.
  • 렐루 함수는 이미지 분류 모델의 은닉층에 많이 사용하는 활성화 함수. 시그모이드 함수는 층이 많을수록 활성화 함수의 양쪽 끝에서 변화가 작기 때문에 학습이 어려워짐. 렐루 함수는 이런 문제가 없고 계산도 간단함.  
  • 옵티마이저는 신경망의 가중치와 절편을 학습하기 위한 알고리즘 또는 방법을 말함. 케라스에는 다양한 경사 하강법 알고리즘이 구현되어 있음. 대표적으로 SGD, 네스테로프 모멘텀, RMSprop, Adam 등이 있음
  • TensorFlow
    • add() : 케라스 모델에 층을 추가하는 메서드
    • summary() : 케라스 모델의 정보를 출력하는 메서드
    • SGD : 기본 경사 하강법 옵티마이저 클래스
    • Adagrad
    • RMSprop
    • Adam

 


Chapter 07. 딥러닝을 시작합니다 - 3) 신경망 모델 훈련

 

 


인공 신경망 모델을 훈련하는 모범 사례와 필요한 도구들을 살펴보겠음. 이런 도구들을 다뤄보면서 텐서플로와 케라스 API에 더 익숙해 질 것. 

 

최상의 신경망 모델 얻기

  • 이번 절에서는 인공 신경망 모델을 훈련하기 위한 다양한 도구를 배웠다. fit() 메서드의 반환값을 사용해 훈련 세트와 검증 세트에 대한 손실을 그래프로 그릴 수 있다. 이를 위해 fit() 메서드는 훈련 세트뿐만 아니라 검증 세트를 전달할 수 있는 매개변수를 제공한다. 
  • 과대적합을 막기 위해 신경망에서 즐겨 사용하는 대표적인 규제 방법인 드롭아웃을 알아보았다. 드롭아웃은 일부 뉴런의 출력을 랜덤하게 꺼서 일부 뉴런에 의존하는 것을 막고 마치 많은 신경망을 앙상블 하는 효과를 낸다. 케라스에서는 드롭아웃을 층으로 제공하기 때문에 밀집층을 추가하듯이 간편하게 모델의 원하는 곳에 드롭아웃을 추가할 수 있다. 
  • 케라스는 훈련된 모델의 파라미터를 저장하고 다시 불러오는 메서드를 제공한다. 또한 모델 전체를 파일에 저장하고 파일에서 모델을 만들 수도 있다. 하지만 과대적합 되기 전의 에포크를 수동으로 찾아 모델을 다시 훈련하는 대신 콜백을 사용하면 자동으로 최상의모델을 유지할 수 있다.
  • 텐서플로와 케라스에는 더 많은 도구와 기능들을 제공한다. 다른 도구들에 대해 배우려면 텐서플로 홈페이지나 핸즈온 머신러닝 2판을 참고. 
 

TensorFlow

모두를 위한 엔드 투 엔드 오픈소스 머신러닝 플랫폼입니다. 도구, 라이브러리, 커뮤니티 리소스로 구성된 TensorFlow의 유연한 생태계를 만나 보세요.

www.tensorflow.org

 

핸즈온 머신러닝 - 교보문고

사이킷런, 케라스, 텐서플로 2를 활용한 머신러닝, 딥러닝 완벽 실무 | 머신러닝 전문가로 이끄는 최고의 실전 지침서 텐서플로 2.0을 반영한 풀컬러 개정판 이 책의 원서는 출간 직후부터 미국

www.kyobobook.co.kr

  • 전체 소스 코드
 

7-3 신경망 모델 훈련.ipynb

Run, share, and edit Python notebooks

colab.research.google.com

키워드로 끝내는 핵심 포인트

  • 드롭아웃은 은닉층에 있는 뉴런의 출력을 랜덤하게 꺼서 과대적합을 막는 기법이다. 드롭아웃은 훈련 중에 적용되며 평가나 예측에서는 적용하지 않는다. 텐서플로는 이를 자동으로 처리한다. 
  • 콜백은 케라스 모델을 훈련하는 도중에 어떤 작업을 수행할 수 있도록 도와주는 도구이다. 대표적으로 최상의 모델을 자동으로 저장해 주거나 검증 점수가 더 이상 향상되지 않으면 일찍 종료할 수 있다. 
  • 조기 종료는 검증 점수가 더 이상 감소하지 않고 상승하여 과대적합이 일어나면 훈련을 계속 진행하지 않고 멈추는 기법. 이렇게 하면 계산 비용과 시간을 절약할 수 있음. 
  • TensorFlow
    • Dropout : 드롭아웃 층
    • save_weights() : 모든 층의 가중치와 절편을 파일에 저장 
    • load_weights() : 모든 층의 가중치와 절편을 파일에 읽음. 
    • save() : 모델 구조와 모든 가중치와 절편을 파일에 저장. 
    • load_model() : model.save()로 저장된 모델을 로드함.
    • ModelCheckpoint : 케라스 모델과 가중치를 일정 간격으로 저장.
    • EarlyStopping : 관심 지표가 더이상 향상하지 않으면 훈련을 중지. 
  • Numpy 
    • argmax : 배열에서 축을 따라 최댓값의 인덱스를 반환함. 

 


예제 파일

 

GitHub - rickiepark/hg-mldl: <혼자 공부하는 머신러닝+딥러닝>의 코드 저장소입니다.

<혼자 공부하는 머신러닝+딥러닝>의 코드 저장소입니다. Contribute to rickiepark/hg-mldl development by creating an account on GitHub.

github.com