Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Star_project

[딥러닝(2)] 출력층 / 손실함수 / cnn (합성곱 신경망) / 손실함수 / 모멘텀 / 과대적합 / 드롭아웃 본문

머신러닝/딥러닝

[딥러닝(2)] 출력층 / 손실함수 / cnn (합성곱 신경망) / 손실함수 / 모멘텀 / 과대적합 / 드롭아웃

star빛 2021. 4. 24. 15:53

 

excelsior-cjh.tistory.com/180

 

06. 합성곱 신경망 - Convolutional Neural Networks

이번 포스팅은 핸즈온 머신러닝 교재, cs231n 강의를 가지고 공부한 것을 정리한 포스팅입니다. CNN에 대해 좀 더 간략하게 알고 싶으신 분들은 아래의 링크를 참고하면 됩니다. 간략한 설명 : 합성

excelsior-cjh.tistory.com

 

 

introduction-to-deep-learning.pdf

가중치를 최적화하는 방법을 함.

층 layer, network라는 것이 나옴.

2. 네트워크 구조가 만들어진다는 것을 눈여겨 볼 필요가 있다.

지금까지 원 하나를 만드는 구조(머신러닝)

이 원 하나를 엄청나게 많이 만들어서 협업하게 만들겠다.

하나의 노드, 유닛을 자세히 보면 가중치를 결합해서 받아들이게 된다. 그 결과값을 가지고 활성화 함수 activate 함수를 통해 출력값을 가지게 됨.

각 노드 유닛들은 두 가지를 가지고 있어야하는데

하나는 자기에게 들어오는 데이터들에 대한 가중치들를 가지고 있어야 함.

나머지 하나는 그 들어온 데이터를 어떻게 출력할지 출력함수를 가지고 있어야 한다.

그러면 효과적으로 학습을 진행한다.

0보다 크면 값을 따라가고 0보다 작으면 0을 따라간다. ReLU 함수

회귀에서는 항등함수 있는 값을 그대로 내보내기

분류에서는 소프트 맥스 함수 총합 1이 되는 확률값 내보내기

손실 함수

회귀는 평균 제곱 오차

분류는 교차 엔트로피 오차 : 효율성이 좋은 것으로 알고 있음

어제 이진분류를 함 . imdb 데이터 셋으로 긍정인지 부정인지 함.

다중 분류 작업은 신경망으로 작업하는 대상이 샘플로는 신경망에 특화되지는 않음.

기존의 머신러닝 알고리즘에 익숙한 데이터 그냥 신경망에 익숙해지자.

다중 분류 샘플은 생략하고 교재있는 것 참고하기.

뉴스기사 분류. 손실함수 부분만 차이나고 어제는 binary 함수 했는데 catergory sparse 손실함수 써야한다는 차이 정보닦에 없음.

오늘은 회귀샘플

신경망에 투입하기에는 매우 작은 데이터량. 보스턴 주택 가격 데이터셋. (예전에 했음)

크게 3가지 종류를 다룰 것.

1. 회귀 2. 분류(이진분류, 다중분류)

손실에 대해서 옵티마이저, 경사하강법 gradient Descent 를 이용해서 가중치 방향을 조절

기울기가 0인 것을 찾고싶음.

그래서 조금씩 + 방향이면 왼쪽으로 이동

이것을 옵티마이저. 최적화 도구라고 부름.

정확한 손실파악 데이터 10000건을 가지고 있으면 각각의 값들이 투입되었을 때

훈련 데이터 전체에 대해서 계산해서 평균을 내는 것이다. => Gradient Descent

그렇게 하니까 연산비용이 많이 들더라.

하나 계산해서 적용을 반복하자 --> Stochatic Gradient Descent

전체가 만건이면 100건씩 잘라서 100번하자 -> mini betch 학습

빨간 점으로 가는 것이 목표

모델 만들 때 배치 사이즈를 지정

full-batch

전체를 한 번에 계산하는 정확도 보다는 mini-batch가 정확도는 떨어지지지만 연산 효율성은 좋고 여러 번 반복하면 정확도도 높아짐.

훈련할 때 배치사이즈를 주도록 이미 설정이 다 포함되어 있음.

매개변수를 갱신하는 방법에 대한 것.

최적화 도구에서 어떤 알고리즘을 사용하는지

조금 후에 이야기할 것.

회귀문제는 어떻게 하는지!

tensorflow-test.ipynb

colab 새파일 만들기

c.regression.ipynb

 

학습의 용량이

뇌로 비교한다면 용량 차이

학습 능력의 차이가 나타날 수밖에 없게됨

명확한 차이가 나타날 것이다.

그런의미에서 나타남

그렇구나

하고 넘어가면 됨.

만들어진 네트워크 가지고 이제 손실함수

--

전체 데이터 셋이 있으면

       

cross validation

4번 반복하게 됨.

keras 는 한 번 학습하고 또 데이터 들어오면 추가학습하고

온라인 학습방법. 콤파일하고 들어오는 fit은 초기화 아니고 추가학습

사이킷런 학습방법은 배치 학습 초기화 시키고 처음부터

타샬 핏이라는 학습은 온라인 학습 기존 학습에 추가해서 학습하는 방식이구나

5장

CNN

RNN 순환 신경망

생성모델 처리 까지 진행하는 것이 목표

5장 6장 7장 8장에 있는 생성모델

1,2 가지 작업 검토

introduction-to-cnn.pdf

합성곱 신경망 Convolutional Neural Network


비교적 최근까지 효과적이고 안정적이지 못하는 상황

이미지 인식분야는 상당부분 문제 해결이 되었다고 할 정도로 많이 발전되어 있음.

이미지 영상 시각적인 자료를 기반으로 정보를 추출하고 다루는 주제

이전에는 어떤 평점이 나올 것인가에 대한 데이터를 가지고 객관적으로 다루는 것이었다면

신경망이 잘하는 것은 인간의 지각과 관련된 것이 잘 되도록 구성함. 도메인이 암을 예측하는 경우 의학적 도메인(주제영역)이 있는 것임. 데이터의 의미와 공부 연구 축적되어있는 정보들이 있는 것 인간의 지각과 관련된 것은 인간의 지각이 도메인. 인간의 지각과 관련된 이해가 있어야 함.

주제 영역 자체가 굉장히 생소한 영역이다. 시각적인 사물의 영역을 보고 사람의 시각이 정보를 인식하는 이해가 있어야 따라함.

이런 문제의 도메인. 그래서 이런 내용을 포함하고 있는 주제.

감각기관 처리 지각 연구를 기반으로 해서 예를 들어 인간의 시각이 어떻게 동작하는지에 맞게 알고리즘이 형성되어야 한다. 발전한 신경망 알고리즘의 한 분야

대뇌 시각 피질 연구에서 시작

신호등을 식별하고 신호등을 판단해야하는데 시각정보를 기반으로 작동함. 이런 영역에서 작업하기 위해서는 필수적인 기술 영역.

처음에는 데이터 양도 그렇고 리소스 문제 한계도 있었는데 지금에와서는 상당수준 가장 많이 발전되어있는 영역

합성곱 신경망 Convolutional Neural Network

이미지, 사진, 영상을 해석하고 유용한 정보를 도출하는 알고리즘

일반적인 신경망과 합성곱 신경망 구조 비교

네트워크 자체는 동일

기본 신경망 구조

Affine (Dense 층을 의미) 완전연결층을 의미. Relu 섞어서 출력 Affine 층 연결 최종 출력해서 범주일 경우 Softmax

(회귀는 항등함수)

합성곱 신경망 구조

Dense 완전연결층이 아닌 특별한 층 사용-> Convolutions층이 있음+ Relu층 + Poolong 층이 하나 더 붙음.

완전 연결 계층 문제

사진을 가지고 작업하는 것.

개, 고양이 사진을 쏟아부어서 강아지인지 고양이인지 레이블 학습하는 것과 동일

손글씨가 28 by 28 사진을 보고 숫자가 몇인지 확인하는 작업처럼

사진, 이미지를 데이터로 사용하는 논리

사진이 28 by 28

그림으로 보는 것.

784(28*28)로 구성 완전연결층은 가상의 픽셀이 독립적으로 들어갈 수 있도록 풀어서 구성해야함.

문제점 -> 사진을 볼때 주변과의 관계, 위치를 통해서 종합적으로 인식하는 것인데 쪼개서 풀어놓으면 정보를 찾기가 어려움.

종합적으로보면 삐져나온 것이 큰 차이가 아님. 그런데 .. 구조가 해체되고 한 픽셀에서 보면 중요해짐.하나의 변화가 결과적으로 다른 결과를 가져옴.

이미지 패턴 인식에서 완전연결층은 해체하는 것을 전제로 하기 때문에 성과를 내기 쉽지 않음.

서로 다른 사진을 반복해서 보는데 지각이 따라갈 수 없을 만큼 빠르게 움직여서 움직이는 것처럼 보임.

사진을 이미지를 보니 사각형 모양으로 되어있는데 기존의 완전 신경망은 데이터를 다 해체해야하는 상황이 벌어져서 온전하게 정보를 관리하기 어렵다. 방법의 변환이 필요하다. 완전 연결계층은 좋지만 방법의 변화가 필요하다.

저 구조를 해체하지 말고 저 구조대로 데이터를 해석하자

사진이 있으면 사진을 해석을 해야하는데 한 꺼번에 다 해석할 수 없으니 window, filter라는 표현을 씀. 구멍을 하나 뚤엏어 놓고 그 구멍으로 상대방을 보면 상대방이 다 안보임. 그런데 조금씩 확인하겠다.

조각내서 보겠다.

볼때에도 사각형 구조는 유지하면서 조각조작 내서 데이터를 해석해보자.

편향을 적용한 합성곱 연산

무엇을 학습해야하는지가 명확하면 목표가 명확

이미지 * 필터 -> 축약된 정보

필터에 의해서 잘 뽑는지 아닌지 결정됨.

오차가 너무 많으면 필터를 조정 다시 합성곱을 만들고 해석, 손실을 알려주면 역전파법 다시 가중치 (필터) 조정

다시 계산. 조정하는 작업을 반복

그때 학습 대상이 가중치(필터)이다.

그리고 Bias 편향치까지.

Input dat * Filter -> 결과 + Bias -> Output data(=Feature map)

특성맵으로 해석하면 잘 되며 잘 뽑은 것 아니면 Filter 조정 후 잘 뽑을 수 있도록 하는것

결과가 필터를 어떻게 구성하고 어떻게 적용하는지에 따라서 이 결과의 사이즈가 달라짐 필터가세개니까 이렇게 나오는 것이지 더 늘이거나 줄이면 결과가 달라짐.

Input data는 4by 4 인데 Filter를 2 by 2 로 하면 특성이 3개로 나옴

Input data는 4by 4 인데 Filter를 3 by 3 로 하면 특성이 2개로 나옴

패딩을하면 기본적으로 원본사이즈보다 줄어들게됨. 사이즈가 줄여드는 것은 싫어서 Zero Padding을 하는 것. 바깥쪽에 0으로 이루어진 padding을 만들어줌

그러면 inputdata(4by4)+패딩추가(6 by 6)을 filter (3 x 3) 그러면 Output data (4 x 4 ) 원본과 동일하 크기의 데이터가 나오더라.

스트라이드가 2개라고 하면 한꺼번에 이동해야하는데 데이터를 이렇게 이동 한칸씩 떨어지는 것이 기본

2개면은 2칸씩떨어져서 이동.

스트라이드를 어떻게 구성하는지에 따라 피쳐맵에 영향

필터는 3 by 3, 5 by 5

스트라이드는 1을 많이 사용

컬러를 가지고 있으면 3장이 나옴.

---(쉬는 시간)---

레드 그린 블루 3개의 채널이 있으면 3개의 채널이있어야함.

원본 이미지에 대해서 분해하는 것.

계산 후 결합 출력 데이터

제로 패딩 스트라이드 하면 원본크기로도 볼 수 있음

그렇지 않으면 줄어들음.

윤곽이라던지 디테일을 보고

점 선 보고

오브젝트를 점점 종합하면서 귀를 보고 눈을 보고 종합이 되면 최종적으로 사람인지 코끼리인지 인식함.

개별적으로 따로따로 인식

그대로 유지를 하면 연산에도 문제가 되지만 종합 정리에도 문제가 있게됨

추상화하고압축하는 작업이 필요함

그런 연산을 풀링 연산이라고 함.

중요한 특징만 뽑아서 전달

추상화된 정보를 꺼냈기 때문

자동차라고 인식했기 때문에 .

추상화하는 작업. 가장 중요한 특징만 뽑아서 남겨두는 것. --> pooling

풀링 윈도우 - ( 2 x 2 )

스트라이드 - 2

로 하면 반으로 줄어들음. 윈도우로 필터링을 한 것. 2가지를 많이 씀. max pooling과 average pooling

max pooling은 가장 큰 값을 뽑음

average pooling은 평균 값을 뽑음

사물을 인식하는데 어떤 것이 더 효과적일까? max pooling이 더 효과적이다.

사이즈가 반씩 팍팍 줄어들음

디테일에서 일반적인 정보 추출

풀링 같은 경우에는 채널마다 그대로 연산해서 계산

원본을 필터링해서 그대로 사이즈만 줄임.

풀링 윈도우는 사이즈만 있고 데이터만 줄어듦. 영역 정보만 가지고 있고 가중치가 없음. 그대로 사이즈만 줄여줌.

연산 과정에서 학습할 매개변수가 없다.

이게 만약에 쭉 늘어져 있으면 큰 변화일 텐데

전체적으로 Feature map으로 보면 변하지 않음.

중요한 큰 변화는 인식되지만 부분적인 변화는 정리가 되어서 요약될 수 있다.

사진의 얼굴이 입력데이터에 상 중 하 어디든 있을 수 있는데

필터를 가지고 모든 곳을 적용하기 때문에 어디있든지 인식할 수 있다.

강화 약화하는 방식으로 다른 위치에 있는 이미지도 학습에 도움.

학습의 효율성 측명

지역을 학습하는 것이다. 사진이 고양이 얼굴일 수도 있고 아닐 수도 있음.

기존의 학습을 재사용할 수 있는 특징.

작업 한 번 할때마다 중요 뽑고 추상화 또 디테일중 중요한거 뽑고 추상화 반복..

복잡한 수식이 없음. 그냥 개별 요소 곱하고 더하면 이렇게 나옴.

Input Data * Filling -> Output Data

d.cnn-a.ipynb

새파일 만들기

처음부터 전체학습을 다 진행하기에는 원활하지 않을 것이다.

그럴만한 충분한 데이터를 가지고 있는 것이 많겠느냐.

가능성있는 현실적인 가능성은 범용학습들.

주로 메이저 기업들 중심으로 학습이 이루어지면 사전에 학습이 충분히 이루어지고 사전학습된 정보들을 가지고 오는것 다 똑같지는 않을 테니까 특수한 형태의 경험만가능

기존에 있었던 학습 결과들을 가져다가 여러분들의 내용에 맞는 전체 학습에 맞게 될 것

구글, ms,아마존 등에서 일반학습을 지니고 있는데 앞으로 공공 학습이 되지 않을까.

그런 방법들이 어떻게 될지.

학습용으로 1000장 밸리데이션 셋으로 500장 테스트용으로 500장

고양이 2000장 강아지 2000장으로 구성되어있음

docs-vs-cats.zip


(점심 시간)

Conv 를 만들어주고

제일 먼저 알아내야할 얘가

Filter 를 지정해주는 것이 중요. 사이즈에 따라 달라짐.

몇개 운영하는지.

레이어를 하나 만들면 몇개 레이어 만들지 가중치와 활성화함수 2차원 구조로 구성. 가로 세로로 어떤 필터를 쓸 것인지 지정 해야함.

from tensorflow.keras import models, layers

model = models.Sequential()

model.add(layers.Conv2D(32, (3, 3), # 필터 사이즈 : (3, 3)

activation='relu', # 편향은 자동으로 붙음. 활성화함수:relu

input_shape=(150, 150, 3))) # 첫 번째 층은 입력사이즈 넣어야함. 150 x 150 이미지 컬러 3개

원본 사이즈는 중요하지 않음 가중치의 크기를 결정하는데는 중요하지 않음.

가중치는 필터에 의해 결정됨 3x3x3

32개를 운영할것 3x3x3+32 = 59

Conv 층 만들었고 ReLU는 활성화 함수라 자동으로 됨

이제 Pooling만들어야 함.

148 148 이 32개 만들어짐.

model.add(layers.MaxPooling2D( (2, 2) )) # (2, 2) window 사이즈 가중치 없음 앞에서 나온 것을 특징만 뽑는 것 74로 줄어들음

Conv 층 하나 더 만듦.

반복

마지막에는 완전연결층 구성

from tensorflow.keras import models, layers

model = models.Sequential()

model.add(layers.Conv2D(32, (3, 3), # 32개 유닛 필터 사이즈 : (3, 3)      

                         activation='relu', # 편향은 자동으로 붙음. 활성화함수:relu

                         input_shape=(150, 150, 3))) # 첫 번째 층은 입력사이즈 넣어야함. 150 x 150 이미지 컬러 3개

model.add(layers.MaxPooling2D( (2, 2) )) # (2, 2) window 사이즈 가중치 없음 앞에서 나온 것을 특징만 뽑는 것 74로 줄어들음

model.add(layers.Conv2D(64, (3, 3), activation='relu')) # 64개 유닛

model.add(layers.MaxPooling2D( (2, 2) ))

model.add(layers.Conv2D(128, (3, 3), activation='relu')) # 128개 유닛

model.add(layers.MaxPooling2D( (2, 2) ))

model.add(layers.Conv2D(128, (3, 3), activation='relu')) # 128개 유닛 이때 가중치는 128이다. , 3*3*128+128=

model.add(layers.MaxPooling2D( (2, 2) ))

model.add(layers.Flatten) # 2차원 -> 1차원

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

model.add(layers.Dense(1, activation='sigmoid')) # 출력층

자동으로 이런 처리 하도록 처리 해 놓음.

model.summary()

3*3*

반으로 줄어든다. MasPooling 해서

conv2d_1 패딩은 안해서 양쪽 끝에 2개가 줄어드어서 72로 줄어드음

MaxPooling 반으로 줄고

패딩 안해서 2개 줄고

반으로 줄고

패딩 안해서 2개로 줄고

반으로줄고

Flatten 하면 1차원 1열로 바뀜. 1차원으로 바뀌는 작업 수행

가중치는 0

dense는 512개의 유닛으로 나누고 가중치는 3211776 의 가중치가 만들어짐....

마지막은 512+1 = 513 으로 가중치 형성

그 다음은 층 만들었으면 손실함수 가지고 최적화 하는 작업하기

from tensorflow.keras import optimizers

model.compile(loss="binary_crossentropy",

                 optimizer=optimizers.RMSprop(lr=1e-4), # learning rate 1e-4: 10의 -4승 

                 metrics=['accuracy'])

이미지 데이터 로더 만드는 작업 수행해보기

# Data Loader

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_generator = ImageDataGenerator(rescale=1./255)

test_generator = ImageDataGenerator(rescale=1./255)

# 디렉터리에 있는 파일을 읽어서 입력 데이터로 만들어주는 변환기 생성

train_generator2 = train_generator.flow_from_directory('train-small',

                                                       target_size=(150, 150),

                                                       batch_size=20, # 한번에 20 개 처리

                                                       class_mode='binary') # 이진분류 체계로 읽어라

validation_generator2 = test_generator.flow_from_directory('validation-small',

                                                        target_size=(150, 150),

                                                        batch_size=20, # 한번에 20 개 처리

                                                        class_mode='binary') # 이진분류 체계로 읽어라

입력데이터 만들었고

옵티마이저 했고

최종적으로 훈련하는 작업만 하면 된다.

history = model.fit(train_generator2,

                              epochs=30, # 30번 반복

                              steps_per_epoch=100, # 1번 반복할 때 100번 돌리기 x batch_size 20개, 한 에폭 당 2000개 이미치 처리

                              validation_data=validation_generator2,

                              validation_steps=50) # 한번에 오십번씩 반복 20개씩 가져오니 에폭의 훈련이 끝나고 벨리데이션 처리하고 또 전체 반복

리뷰

  • 시퀀스 구성 레이어 구성. 레이어 안에 있는 하나 하나의 단위(유닛)이 어떤 방식으로 구성되어있는 지의 차이이다.

입력 들어오면 다 곱해서 합쳐서 활성화함수 해서 처리 일렬로 쭉 처리해서 처리 .쭉 줄을 세워서 들어오고 엑티베이션 함수로 처리.

cnn은 들어오는 데이터와 들어오는 데이터를 해석. 하나의 가중치를 결합시켜서 보는 방식.

cnn은 시각, 지각 인식. 매출 해석과는 다르게 봐야함.

그 체계가 일반적인 매출의 연관관계와는 다르다.

그렇게 모델링 되는 메커니즘이 합성곱 신경망 구조

Conv ReLU Pooling 구조 사람의 시신경 구조를 모방

  • 합성곱 연산

완전 연결층은 쭉 나열에서 하나당 가중치 하나 곱해서 더하는 작업

합성곱 연산은 위와 달리 부분을 뽑아내고 부분을 뽑아내고 그 좁은 범위를 지정해야함. 그것을 Filter라고 하고 그것이 가중치다. Filter를 가지고 Inputd data를 재구성해서 Output data 출력.

완전 연결망은 데이터 하나당 가중치를 두어서 결합

그런데 Convolutional Neural Network

32개의 유닛이 3x3 filter

데이터를 재구성하는 것.

층을 쭉 연결하는 작업을 수행함.

CNN 을 할 때 가장 마지막 단은 Flatten을 하고 Dense 층으로 학습.

네트워크 만들었고 손실 작업하는 것은 동일

옵티마이저는 RMSprop 이용해서 손실 처리

정확도 어떻게 가져올지 지정

image_generator 이용해서 이미지 가져오기

  • Pooling

하나는 MaxPooling : 특징을 가져와서 추상화

(예, 자전거 그리세요 하면 구체적으로 그리지 못함. 디테일을 기억하지 못해서)

이미지 인식 = 디테일 인식 x , 종합적 인식 o

일정부분의 핵심만 뽑아서 기억할래 반복.

최종적인 추상화

148x 148 이미지를 7 x 7 로 추상화 특징만 압축

Flatten 처리 고차원이 1차원으로 변환

다음 단계로 넘어갈 수 있도록 사용.

시각화 하는 작업을 수행할 수 있음 교재에 있음.

시각화 하는 작업

넘어오면서 과대적합 상황이 발생함

test 데이터는 18, 19 정도 되는 위치에서 최적저이 형성

훈련데이터는 0.7 부터 과대적합

validation

training 데이터가 낮아지더라도 둘의 가격이 좁혀지는 방법 찾아야

---

  • 손실은 수식이 복잡

주말에 새로운 시야를 넓혀주는 주제 머신러닝의 수학적 이해

--

매개 변수 갱신

모멘텀 계열과 AdapGrad 계열이 있음

두가지를 모두 합친 것이 Adam

뭐쓸지 모르면 Adam 써라 하기도.. 특별한 이유 없으면 Adam 써라할 정도로 무난한 도구

두 가지 큰 흐름

모멘텀 계열과 Adaptive Gradient

맥락.

손실함수를 가지고 최적화

optimizer

가중치 조정 우리가 아는 가중치 조정은 Gradient Descent 조정

손실이 가장 적은 점은 기울기가 0인 곳. 기울기가 0 인곳이 최적인가. 기울기가 + 이니 - 로 가자

어떻게 갈 것인가. 효과적으로 갈 것인가.

지역 최저점에 갇혀 버릴 수도 있다. 빠르고 효과적으로 어떻게 갈것인가!

확률적 경사 하강법

정직하게 가지 말고 조금씩 가는 것..

미리 한꺼번에 많이 가면 안되나? 상황에 따라 영리하게 움직이자.

 

  • 모멘텀

그 방법중에서 모멘텀이라는 방법

기울기를 결합하는 것은 맞음 가속도라는 개념

V를 결합하지만 V를 결합하는 앞의 식.

어디엔가 저장을 해놓음. 저장이 되어있다면 다음 번 기울기에 같은 방향의 같은 기울기가 들어왔다면 같은 방향이라면 조금 더 많이 움직이게 됨. 같은 방향으로 이동을 하고 있다면 기존에 있던 가속도를 이용해서 조금씩 더 가자 반대 방향이면 덜 가자

진행방향이 있으면 가속도로 점점 더 이동하자

  • Adagrad

행렬의 원소별 곱

무조건 + 값이 나옴. 하면 할수록 커짐. 누적되어지면 값이 커짐

여러 번 이동하면 성큼성큼 처음에는 가다가 점점점 조심스럽게 가자 진행할수록 정답에 근접할테니 그때는 천천히 조금씩 가자.

처음에 많이 이동하자 그 후 천천히 이동하자

  • Adam

모멘텀과 AdaGrad를 결합 = Adam

큰 계열은 모멘텀과 Adaptive gardient 인데

조금 더 붙이면

모멘텀계열과 Adaptive 계열로 나뉨

모멘텀은 같은 방향이면 더 가속도 반대방향이면 기존 움직임 고려해서 조금만 움직인다.

Adagrad는 횟수를 늘리면 속도가 줄어듬

오래된 것들에 대한 가중치는 낮추고 최근 것을 반영해서 이동평균 계산 RMSProp

AdaDelta 윈도우를 걸어서 최근 20개의 이동평균을 계산하자.

NAG 기울기와 이동량을 같이 봐야함. 그렇게 하지말고 일단 이동량 만큼 간 다음에 거기서 기울기를 계산하자. 그러면 속도가 빠르다.

Nadam : Adam에 Momentum 대신에 NAG를 결합

Adam : RMSProp + Momentum 결합 방향도 스텝 사이즈도 적절하게

예) 달고나! 선 가기전에는 휙휙 가다가 선 테두리 가까워지면 천천히 신중히

무조건 평균 내지 말고 최근치에 가중치를 주자 RMSProp

모델에 들어가는 기본 요소는 설명이 다 완료된 상황

전체 네트워크 구성하는 상황

층을 구성할 때 유닛은 어떻게 만들어야하고 유닛이 다루는 가중치

활성화 함수 구성 그러면 나머지는 알아서

최적화 함수를 하기 위해서 손실함수 무엇을 쓸지 손실함수를 정답에 최적하하겠다 optimizer 의 종류 adam RMSprop momentom 손실을 최소화 시킬수 있다.

CNN까지 이야기하면서 신경망의 중요한 요소들 봄.

다음 시간에는 작업하는 시간 가져보기

일반적인 정형화된 데이터 셋은 기존의 머신러닝 알고리즘 작업

딥러닝은 이미지, 자연어 작업 처리할 것. 여기서부터 현실적으로 작업을 해볼 것.

내일은 CNN이 비중이 커서 내일까지 CNN 작업, 증식, 전이학습을 할 것.

----(쉬는 시간)----

e.cnn-b.ipynb

과대적합을 해결하는 작업은 신경망에서도 해결을 해야하는 문제

또 하나 중요한 이슈는 층이 늘어남

층을 늘려서 작업을 하는데 딥 뉴럴 네트워크. 층을 늘리는데 이 층을 늘릴 때 난제, 기울기 소실이라는 문제가 생김

기울기가 한쪽으로 막 쏠림

0이되어버리거나 1로 쏠리면 다양한 학습을 할 수 없게 됨.

다양한 값을 가져야 하는데 비슷한 작업만 하게됨. = 기울기 소실

이 문제를 해결하는 것도 중요한 이슈

층을 늘려놓으니까 뒤로 갈수록 기울기가 비슷해지니까 의미가 없어짐. 매번 동일한 작업이 되어버림

-> 1. 기울기 문제 해결

2. 과대적합 문제

용량이 늘어나는 것은 더 많이 해석하고 더 많이 정보를 찾아낼 수 있어서 훈련 데이터에서는 기가막히게 정보를 찾아냄

과대적합문제와 기울기 소실 같은 문제는 난제 중에 하나였다. 기울기 계산의 연산 효율성 때문에 도구들이 알고리즘이 나와서 문제를 해결했다. 층을 깊게하는 것이 어려운 문제였다.

PPT

introduction-to-deep-learning.pdf

momentom, adam, ... 등...

그다음에는 층을 늘렸을 때 각 층이 자기 역할을 수행하면서 층을 늘렸을 때의 의미를 보존해야하는데 1) 출력값이 비슷해지는 기울기 소실문제 2) 과대적합 문제를 어떻게 해결할 것인가.

그래서 과대적합 문제를 해결하기 위해서

과적합(오버피팅)

해결

mse값을 계산하거나 손실을 계산했는데 가중치 값 편차가 커서 못튀게 만들자 가중치 값을 눌러야하는데 그래서 규제를 줌.

의미만 보기!

가중치를 적용할 수 있음. 가중치를 적용해서 기울기가 튀지 않도록 만들어주는 작업을 할 수 있음.

L1, L2 규제

손실. 손실함수를 이렇게 규정함.

추가항을 넣는 것.

+로 추가항을 넣으면 전체를 줄여야하는 문제에 봉착... w의 값이 커지는 것을 막아야 함.

규제 적용

kernel_regularizer="l2"

l1규제 l2규제 등 결합해서 작용함. -> 과대적합 문제를 해결

λ람다 값이 조절기 이 값을 같이 넣어서 통제

드롭아웃

은행원이 자꾸 바뀌는 것에서 고안

구조상으로는 그럼. 층들이 완전 연결되어야 하는데 중간 중간에 랜덤하게 없애버림. 그러면 출력을 안내보내는 방법으로 죽은 노드를 일정한 비율만큼 층을 없애서 출력이 없어져서 확 줄어들음.

항상고정된 것을 죽이는 것이 아니고 랜덤으로 없앰. 애폭할 때마다 30% 없애버려 램덤하게.

-> 의도 : 전체 노드를 다 풀어놨더니 극단적으로 한 부분에만 최적화됨. 일부분이 없어지면 해야할 일이 전파되어서 다양한 관점으로 해결하게 된다. 한 군데에 집중하지 않고 여러 부분에 해석하게 된다.

훈련데이터의 특정한 부분에 매우 집중 = 과대적합

옆의 노드가 하던 일까지 고려해야하니 종합적으로 학습. 포괄적으로 학습

실제로 과대적합문제에 굉장히 효과적. 노드가 다양한 학습을 통해 한 쪽에 치우쳐지지 않게

model.add(layers.Drop(0.5)

layer를 추가하면 됨. + 비율을 주면 됨 랜덤하게 반만 살아남음

규제와 드랍아웃이라는 도구를 이용해서 신경망에서의 과대적합을 해결하려는 일정정도의 솔루션을 가지고 있다.

CNN 구조의 네트워크를 작업했고

혼자 실습 시간

어제 신경망 시작해서 회귀 분류 어떻게 처리하는지 보았다.

신경망 딥러닝이 잘하는 것 높은 수준에서 해결했다고 알려진 이미지 패턴 인식 문제를 해결

CNN이라는 알고리즘 해결

전형적인 구조의 해결

이제 지금 하는 것은 validationset을 구성안해서 과대적합 문제가 발생할 수 있다. 그러면 어떻게 할 것인가.

내일은 이미지 증식에 대해서 할 것. 기존 이미지를 증식해서 훈련데이터 셋 늘리는것.

사전의 학습되어있는 가중치 학습을 늘려서 할 것. 전이

공부량을 가져다가 얹어서 쓰겠다.

사전 학습을 운용하는 것.

앞으로도 실제 딥러닝과머신러닝 환경에서 매우 일반적인 형태의 작업이 될 것.

범용학습도구 도메인에 맞게 추가학습

그러면 매우 강력한 메커니즘

사기업에서 만들면 돈을 받고 매커니즘을 팔고 공기업에서 만들면 공공 서비스가 되는 것.

가져와서 자기 작업에 맞게 추가 변형하는 형태로 갈 것.

신경망의 진짜 주제로 들어왔고 남은 시간은 4일

훈련 끝나면 업로드