관리 메뉴

ComputerVision Jack

[케라스 Chapter9정리] 본문

DeepLearning/케라스 - Keras Lib

[케라스 Chapter9정리]

JackYoon 2020. 2. 24. 23:09
반응형

핵심 개념 리뷰

인공지능

역사가 깊고, 광범위한 분야 일반적으로 인지 과정을 자동화하기 위한 모든 방법

머신러닝은 인공지능의 한 분분이며 딥러닝은 머신러닝의 한 분야이다.

 

머신러닝

훈련 데이터를 사용하여 자동으로 프로그램을 개발하는 AI의 특정 하위분야

 

딥러닝

머신러닝의 여러 종류중 하나. 기하학적 변환 함수들이 번갈아 가며 연속적으로 실게 연결된 모델.

이 연산들은 층이란 모듈을 구성한다.

 

딥러닝에서 모든것은 벡터이다. 모두가 기하학적 공간에 놓인 하나의 포인트이다. 모델의 입력과 타깃이

먼저 벡터로 바뀌어야 가능하다.

 

주요 네트워크 구조

  • 벡터 데이터 : 완전 연결 네트워크
  • 이미지 데이터 : 2D 컨브넷
  • 사운드 데이터 : 1D 컨브넷 or RNN
  • 텍스트 데이터 : 1D 컨브넷 or RNN
  • 비디오 데이터 : 3D 컨브넷 or RNN & 1D컨브넷 조합

완전 연결 네트워크

벡터 데이터를 처리하는 Dense층을 쌓은 것. 네트워크 입력 특성에 특별한 가정을 두지 않는다.

한 Dense 층의 유닛이 다른 층의 모든 유닛과 연결되어 있기 때문에 완전연결이라고 부른다.

 이진 분류

 이진 분류를 수행하려면 마지막 Dense층이 하나의 유닛을 가져야하고 시그모이드 활성화 함수를 사용한다.

model = models.Sequential()

model.add(layers.Dense(32, activation = 'relu', input_shape=(num_input_features,)))

model.add(layers.Dense(32, activation = 'relu'))

model.add(layers.Dense(1, activation = 'sigmoid'))

 

model.compile(optimizer = 'rmsprop', loss = 'binary_crossentropy')

 

 단일 레이블 다중 분류

 단일 레이블 다중 분류 수행하려면 마지막 Dense층이 클래스 개수 만큼 유닛을 가져야하고 softmax 활성화 함수를 사   용한다.

model = models.Sequential()

model.add(layers.Dense(32, activation = 'relu', input_shape=(num_input_features,)))

model.add(layers.Dense(32, activation = 'relu'))

model.add(layers.Dense(num_classes, activation = 'softmax'))

 

model.compile(optimizer='rmsprop', loss= 'categorical_crossentropy')

 

 다중 레이블 분류

 다중 레이블 분류는 마지막 Dense층이 클래스 개수 만큼 유닛을 가져야하고, 시그모이드 활성화 함수를 사용한다.

 타깃은 k-핫 인코딩 되어야한다.

model = models.Sequential()

model.add(layers.Dense(32, activation = 'relu', input_shape = (num_input_features, )))

model.add(layers.Dense(32, activation = 'relu'))

model.add(layers.Dense(num_classes, activation = 'sigmoid'))

 

model.compile(optimizer='rmsprop', loss= 'binary_crossentropy')

 회귀

 회귀 수행하려면 마지막 Dense층이 예측하려는 값의 개수만큼 유닛을 가져야하고 활성화 함수를 사용하지 않는다.

model = models.Sequential()

model.add(layers.Dense(32, activation = 'relu', input_shape=(num_input_features, )))

model.add(layers.Dense(32, activation = 'relu'))

model.add(layers.Dense(num_values))

 

model.compile(optimizer = 'rmsprop', loss= 'mse')

 

컨브넷

합성곱 층은 입력 텐서의 여러 위치에 동일한 기하학적 변환을 정용하여 공간 방향의 지역 패턴을 찾는다.

이동 불변성을 가진 표현을 만들어 합성곱 층을 데이터 효율적으로 만들어 모듈화 한다.

 

컨브넷(합성곱 네트워크)는 합성곱 최대 풀링 층이 쌓여 구성된다. 풀링 층은 공간 방향으로 데이터를 다운 샘플링한다.

컨브넷은 Flatten 연산이나 전역 플링 층으로 끝나는 경우가 많다.

model = models.Sequential()

model.add(layers.SeparableConv2D(32, 3, activation = 'relu', input_shape = (height, width, channels)))

 

model.add(layers.SeparableConv2D(64, 3, activation = 'relu'))

model.add(layers.MaxPooling2D(2))

 

model.add(layers.SeparableConv2D(64, 3, activation = 'relu'))

model.add(layers.SeparableConv2D(128, 3, activation = 'relu'))

model.add(layers.MaxPooling2D(2))

..식으로 전개

 

RNN

순환 신경망은 한 번에 하나의 타임스텝씩 입력 시퀀스를 처리하고 이 과정 동안 상태(State)를 유지한다.

여러개의 RNN층을 겹겹이 쌓으려면 마지막 층 이전의 모든 층은 전체 시퀀스를 출력해야한다.

model = models.Sequential()

model.add(layers.LSTM(32, input_shape = (num_timesteps, num_features)))

model.add(layers.Dense(num_classes, activation = 'sigmoid'))

 

model.compile(optimizer = 'rmsprop', loss = 'binary_crossentropy')

딥러닝의 한계

딥러닝 모델은 한 벡터 공간을 다른 벡터 공간으로 매핑하기 위해 단순하고 연속된 기하학적 변환을 연결한 것

한 매니폴드 X에서 다른 매니폴드 Y로 매핑하는 것이 할수 있는 전부이다.

 

사람처럼 학습에 의해 궁극 일반화 시키는 것이 아닌, 학습을 통해 역 일반화를 이루어 내기 때문에 한계점이 

존재한다.

딥러닝의 미래

머신러닝 분야에서 기대하는 필수 적인 변화는 순수한 패턴 인식을 수행하고 지역 일반화만 얻을 수 있는 모델을 탈피하는 것이다. 추상과 추론을 통해 궁극 일반화를 달성하는 모델이다.

 

또한 미분 가능하지 않은 시스템을 효율적으로 훈련할 방법을 찾아야한다. 

  • 유전 알고리즘
  • 진화 전략
  • 일부 강화 학습
  • ADMM(Alternation Direction Method of Multipliers) 

역전파는 엔드-투-엔드로 연속된 변환을 학습하는 데 뛰어나지만 심층 네트워크의 모듈 성을 활용하지

않기 때문에 계산 효율성이 떨어진다.

 

하이퍼 파라미터 튜닝 또한 간단한 탐색 절차이기 때문에 프로그래머가 할 수 있는 일이 극히 줄어든다.

하지만 데이터 전처리 과정은 필수적으로 프로그래머가 개입해야한다.

 

마지막으로 모델이 프로그램과 더욱 비슷해 지면 프로그래밍 언어에 있는 함수나 클래스처럼

모델의 프로그램 서브루틴을 재사용하기 시작한다.

 

반응형

'DeepLearning > 케라스 - Keras Lib' 카테고리의 다른 글

[케라스 Chapter8 정리]  (0) 2020.02.23
[케라스 Chapter7정리]  (0) 2020.02.18
[케라스 Chapter6 정리]  (0) 2020.02.11
[케라스 Chapter5 정리]  (0) 2020.01.31
[케라스 Chapter4 정리]  (0) 2020.01.28
Comments