딥러닝 구조와 모델

이규상·2023년 8월 9일
0

학습목표

  • 딥러닝 모델(네트워크)를 구성하는 레이어에 대한 개념을 이해
  • 딥러닝 모델을 구성하는 방법에 대해서 학습

딥러닝 구조

케라스에서 제공하는 구성도를 살펴보면, 크게 Model API와 Layer API가 있고 필요한 모듈들을 Modules API를 호출해서 사용

레이어

딥러닝은 여러개의 레이어로 구성
기본적으로 입력층, 은닉층, 출력층으로 구분
레이어는 딥러닝 모델을 구성하는 핵심 데이터 구조로서 하나 이상의 텐서를 입력받아 하나 이상의 텐서를 출력하는 데이터 처리 모듈

  • 딥러닝에 필요한 라이브러리

  • Input 객체

    • 딥러닝 모델의 입력을 정의할 때 사용
    • 입력 데이터의 모양인 shape와 예상되는 데이터 유형인 dtype등을 포함
  • Dense 레이어

    • 완전연결계층으로 노드수(유닛수)를 지정하면 생성
  • Flatten 레이어

    • 배치 크기(또는 데이터 크기)를 제외하고 데이터를 1차원 형태로 평평하게 변환
  • Activation 레이어

    • 활성화 함수는 이전 레이어의 결과값을 변환하여 다른 레이어로 전달하는 역할
    • 크게 선형 활성화 함수와 비선형 활성화 함수로 구분
    • 딥러닝에서는 선형 활성화 함수를 사용하면 다층 구조를 사용하는 의미가 없기 때문에 모델 표현력을 위해서 비선형 활성화 함수를 사용
  • 활성화 함수

    • 시그모이드 함수

      확률 예측 모델에 자주 사용되며, 값을 0과 1사이로 표현
      0과 1에서 포화(saturate)되는 문제가 있다.
      입력값이 작아도 0이하가 될 수 없고, 커져도 1 이상이 될 수 없기 때문에 훈련 시간이 오래 걸리고, 그래디언트(기울기)가 0에 가까워져서 가중치 업데이트가 발생하지 않게된다

    • 하이퍼볼릭 탄젠트 함수

      0을 중심으로 -1과 1 사이로 값을 표현
      일반적으로 시그모이드 함수보다는 빨리 훈련
      여전히 -1과 1에서 포화되는 문제가 있음

    • ReLU 함수

      0부터 무한대까지의 범위를 가짐
      하이퍼볼릭 탄젠트 함수보다 몇 배는 더 빠르게 훈련
      ReLU 함수 출력 값이 0이 중심이 아니고, 학습률이 크면 ReLU를 사용한 노드에서 출력을 0으로만 하는 문제가 있음

    • Leaky ReLU 함수

      ReLU 함수에서 노드 출력을 0으로만 하던 문제를 아주 작은 음수값을 출력하게 만들어 해결

    • ELU 함수

      ReLU가 중심점이 0이 아니고, 노드 출력을 0으로만 하던 문제를 해결한 활성화 함수
      ELU 함수는 0이하에서는 exponential 연산이 수행되므로 계산 비용이 높아지는 단점

딥러닝 모델

  • 라이브러리

    케라스에서 모델과 유틸리티들을 사용할 수 있도록 import

  • Sequential API

    • 모델이 순차적인 구조로 진행할 때 사용하는 간단한 방법
    • 다중 입력 및 출력이 존재하는 등의 복잡한 모델을 구성할 수 없음
    • add()를 사용하여 레이어들을 추가할 수 있다
    • plot_model() 함수를 통해 딥러닝 모델의 모습을 시각적으로 확인할 수 있다.
    • 다른방법 : Sequential 인자에 한번에 추가하는 방법

  • Functional API

    • 모델 생성에 권장되는 방법
    • 딥러닝 모델을 복잡하고, 유연하게 구성하는 것이 가능
    • 다중 입출력을 다룰 수 있음
    • Input 객체를 여러 레이어에서 사용하는 것이 가능

    • Concatenate()를 이용하여 Dense 레이어 결과와 Input을 결합

    • Functional API를 이용하면 여러 Input 객체를 사용하는 것도 가능

    • Functional API를 이용하면 결과를 여러개로 나눠서 사용하는 것도 가능

    • Functional API를 이용하여 다중 입력과 다중 출력이 가능한 모델도 만들 수 있다

  • Subclassing API

    • 커스터마이징에 최적화된 방법으로 Model 클래스를 상속받아서 사용
    • Functional API로도 구현할 수 없는 모델들도 구현이 가능
    • 객체지향 프로그래밍에 익숙해야 함
    • fit(): 모델 학습
      evaluate(): 모델 평가
      predict(): 모델 예측
      save(): 모델 저장
      load(): 모델 불러오기
      call(): 메소드안에서 원하는 계산 가능

다시복습하기

profile
프로그램 공부하는 사람

0개의 댓글