728x90

C4W2L06 Inception Network Motivation

- 합성곱 신경망을 설계할때 1 x 3, 3 x 3, 5 x 5 등 필터 크기를 지정해주어야 함.

 =>  인셉션 신경망에서는 모든 필터 크기를 다 사용함. 복잡하지만 성능은 더 좋아짐.

 

인셉션 신경망의 개요

- 필터 크기 지정없이 다양한 합성곱, 풀링 층을 사용함.

- 28 x 28 x 192 -> 1 x 1 x 192 x 64 => 28 x 28 x 64

- 28 x 28 x 192 -> 3 x 3 x 192 x 128 => 28 x 28 x 128

- 28 x 28 x 192 -> 5 x 5 x 192 x 32 => 28 x 28 x 32

- 28 x 28 x 192 ->  Max Pool 28 x 28 x 32 => 28 x 28 x 32

 * 다른 합성곱 연산 결과와 맞추기 위해서 최대 풀링의 경우 same, s=1 지정 필요

=> 아래의 인셉션 모듈의 출력은 28 x 28 x 256

- 필터나 풀링을 지정하기 보다 모두 사용해서 합한것을 학습함.

- 인셉션 모듈의 문제로 계산 비용이 있음.

계산 비용 문제

- conv2d 5 x 5, same, 32 연산 시 출력은 28 x 28 x 32

- 28 x 28 x 32 (output)  x 5 x 5 x 192 (각 출력을 계산하는데 필요한 연산수) = 120M

- 1 x 1 convolution으로 계산 비용을 크게 줄일 수 있음.

 

1 x 1 합성곱 연산 사용하기

- 28 x 28 x 192 입력에 1 x 1 x 192 x 16 연산 후, 5 x 5 x 16 x 32 합성곱 연산 수행

-  중간의 1 x 1 convolution으로 채널 수를 크게 줄임. 이를 bottleneck layer 병목층이라 부름.

- 28 x 28 x 16의 출력을 구하기 위한 계산량 : 28 x 28 x 1 x 1 x 16 x 192 = 2.4M

- 28 x 28 x 32 출력을 구하기 위한 계산량 : 28 x 28 x 32 x 5 x 5 x 16 = 10.0M

- 총 계산량 = 2.4M + 10.0M = 12.4M

* 1 x 1 합성곱 연산을 하지 않았을때 120M 연산량보다 1/10으로 줄어듦.

- 표현 크기를 줄이면 성능 저하가 일어날 수 있으나 보틀넥 레이어를 잘 구현하면 계산량을 잘 줄이면서 성능에 지장 주지않을수있음

 

 

300x250
728x90

 

C4W2L05 Network In Network

- 1 x 1 합성곱의 유용함을 알아보자

 

왜 1 x 1 합성곱 연산을 하는가?

- 입력 텐서의 공간적 모든 지점들을 각각 1 x 1 합성곱 연산하고, 비선형 함수를 적용하는데  필터의 개수 만큼 출력한다

 => 6 x 6 x # filters

- 1 x 1 합성곱 연산을 네트워크 안의 네트워크라고도 부름.

- 많은 합성곱 신경망에 이용됨.

 

1 x 1 합성곱 연산의 예시

- 28 x 28 x 192의 입력 텐서가 들어올 때 공간적 크기를 줄이려면 풀링을 하면 됨

- 채널을 줄이려면 1 x 1 합성곱 연산을 통해 1 x 1 x 192 x #filter 크기의 텐서를 합성곱연산하여 28 x 28 x #filter로 차원을 줄임

 

 

 

 

300x250
728x90

Train/Dev/Test Sets (C2W1L01)

- 이번 주에는 신경망을 잘 동작하기 위한 : 하이퍼 파라미터 튜닝, 데이터 설정, 최적화 알고리즘 등에 대해 살펴봄.

 

 

실제로 ML 사용하는것은 매우 반복적인 과정

- 레이어의 개수, 은닉층 유닛 개수, 학습률, 활성화 함수 등을 고려해야하나 처음에는 어떻게 골라야할지 모름.

- 더 나은 신경망을 얻기 위해서 직접 지정해보고, 구현해서, 돌려보고 반복하여야 함.

- 신경망의 현재 활용 분야 NLP, Vision, Speech, 구조화된 데이터로 웹검색, 추천 등

- 한 분야의 내용이 다른 분야에서도 적용시킬수도 있음.

- 아무리 전문가라해도 한번에 하이퍼파라미터를 잘 지정하는건 어려움.

 => 여러번 반복 과정을 거쳐야함

훈련/개발/테스트 셋

- 빠르게 개발하기 위해서 효율적으로 위 사이클을 돌고, 데이터를 잘 모아야 함.

- 전체 데이터셋을 테스트셋/검증셋(개발셋)/테스트셋 으로 나누어 사용.

- 워크플로는 훈련셋으로 학습하고, 검증셋으로 어떤 모델의 성능이 최적인지 봄. 최종 모델에다가 테스트셋을 돌림.

- 관행 : 70 훈련, 30 테스트    혹은    60 훈련, 20 검증, 20 테스트

- 빅데이터 시대(현대) : 검증, 테스트셋의 비율을 최소한 평가할수 있을 만큼 줄여도 괜찬음. 

일치하지 않은 훈련/테스트셋 분포

- 현대에는 일치하지 않는 훈련/테스트셋을 사용하고 잇음.

- 고양이 분류시 훈련셋은 웹에서 구한 고양이 사진, 테스트셋은 앱에서 사용자로부터 얻은 고양이 사진

 * 웹에서 구한 사진은 고해상도고, 전문가스러우나, 앱에서 올라온것은 흐릿하고, 저해상도의 이미지들

 => 훈련셋과 테스트셋의 분포가 일치하지 않는다. => 같은 분포로 하는 것이 좋다.

- 테스트셋은 없어도 괜찬음. 테스트셋은 최종 신경망의 비편향성 추정치를 구하기 위함. 이게 필요없다면 테스트셋없이 검증셋만 있어도 됨. 검증 셋으로 서로 다른 아키텍처를 비교해서 더 나은걸 고르면 되겠다. 

 

 

 

 

 

 

 

 

 

 

300x250
728x90

C4W2L03 Resnets

Residaual block

- 아주 깊은 신경망이 훈련하기 힘든 이유는 그라디언트 소실이나 폭증 때문임.

- 스킵 커낵션은 한 레이어의 활성 결과를 더 깊은 레이어로 전달함. -> 100층 넘게 훨씬 깊게 학습 가능해짐.

- main path : a_l -> linear operator -> relu -> a_l+1 -> linear op -> relu -> a_l+2

- resnet에서 main path를 수정하여 a_l를 a_l+1를 선형 연산 후 relu 적용전에 덧샘 연산함 => 이를 short cut이라 부름.

 * a_l의 정보는 더 깊이 전달된다.  => a_l+2 = g(z_l+2 + a_l)

 * short cut을 skip connection이라고도 부름.

- residual block을 사용하면 훨씬 깊은 신경망을 학습 할 수 있게 됨.

Residual Network

- resnet 논문에서 스킵 커낵션이 없는 신경망을 plain network라 함.

- 아래의 신경망은 5개의 residual block으로 이루어진 신경망.

- plain network는 layer가 깊어질수록 계속 에러가 내려가야하나 실제로는 증가함.

  * 최적화 알고리즘이 학습하기 힘들기 때문.

- resnet의 경우 층이 늘어나도, 100층 이상이더라도 에러도 계속 줄어듦

 

 

 

C4W2L04 Why ResNets Work

왜 잔차 신경망이 동작할까?

- 신경망이 깊어질 수록 훈련 셋을 잘 학습하기 힘들어 지므로 잘 깊게 만들지 않음. 하지만 resnet은 다름.

- a_l+2 = g(z_l+2 + a_l) = g(w_l+2 a_l+1 + b_l+1 + a_l) *여기서 a_l은 스킵 커낵션으로 전달받음.

- 여기서 w_l+2 = 0이면 a_l+2 = a_l가 되며, relu로 인해 양수값만 존재.

- 이와 같이 항등 함수로 학습이 되면, a_l+2 = a_l이므로 적어도 성능이 떨어 질 일이 없으며 훈련이 더 용이해짐

- 이런 은닉 유닛을 많이 학습하면 성능 향상을 이룰 수 있음. 허나 스킵 커낵션이 없으면 항등 함수 물론 학습하기힘듬.

 * 항등 함수를 학습한다 = 스킵 커낵션은 적어도 성능 저하는 없다!

 

ResNet

- Plain Network에서 이미지를 입력으로받아 마지막에 softmax 출력을 받음.

- ResNet은 Plain에 skip connection이 추가됨. 

- 이때 3 x 3 same conv 연산이 수행되어 공간적 크기가 줄어들지 않음. 대신 중간 중간에 풀링 수행

 

 

300x250
728x90

C4W2L01 Why look at case studies?

- 이번 시간에는 지난 주에 배운 기초 블록들로 만든 신경망 케이스 연구들을 살펴보자.

- 누군가 개발한 개, 고양이 분류 신경망을 자율 주행이나 다른 분야에도 활용 할 수도 있음.

- 다음 강의에서 볼 고전 신경망으로 LeNet-5, Alexnet, VGG 등

- 그 다음으로 resnet에 대해서 살펴볼것임. resnet은 깊게 학습 가능함.

- 마지막 케이스 스터디로 inception에 대해서 배우자.

 

 

 

 

 

 

C4W2L02 Classic Network

LeNet-5

- LeNet-5는 32 x 32 x 1 크기의 흑백 손글씨 이미지를 인식하는 모델

- conv2d, 5 x 5, s=1, 필터 6개 사용, no padding => 28 x 28 x 6

- avg pooling, f = 2, s = 2 => 14 x 14 x 6

- conv2d, 5 x 5, s = 1, 16 filters, no padding => 10 x 10 x 16

- avg pooling, f=2, s=2 => 5 x 5 x 16 = 400

- flatten 후 fully connected layer, hidden unit 120 

- fc2, 84 => y_hat, 10 categories, softmax

 

- 60k parameter로 작은편, 요즘은 10m, 100M등 수천배만음.

- N_h, N_w가 줄어들고, N_c가 늘어남.

- conv - pool -> conv - pool -> fc -> fc -> output

- tahn/sigmoid를 활성화 함수로 사용하고, 당시에는 relu는 잘 안씀 * 풀링 뒤에 비선형 활성화 함수 사용.

* 이 논문을 읽을때 섹션 2, 3 읽기를 추천함.

 

 

AlexNet

- Alex krizhesky et al.

- 227 x 227 x 3 크기 이미지를 사용.

- 1. 11 x 11, s = 4, N_c = 96 => 55 x 55 x 96,    max pooling 3 x 3, s= 2 => 27 x 27 x 96

- 2. 5 x 5, same, N_c = 256 => 27 x 27 x 256,    max pooling 3 x 3, s = 2 => 13 x 13 x 256

- 3. conv + max_pooling => 6 x 6 x 256 = 9216

- 4. fc 4096 -> fc 1000 -> softmax, 1000

- LeNet-5와 유사하나 훨씬 큼. (LeNet - 60k 개의 파라미터였다면, AlexNet은 60M개의 파라미터를 가짐)

- LeNet-5와 달리 ReLU를 활성화 함수를 사용.

- 당시 GPU 성능이 나빠 두 개의 GPU에서 작업하도록 나눠서 사용.

- Local Response Normalization layer 도 있었으나 자주 사용되지 않음. 

 * 13 x 13 x 256 LRN은 h,w 한지점의 모든 채널을 보고 정규화 수행. 높은 활성 값을 가진 경우가 많아지는걸 방지하기 위함. 성능 상 유용하지는 않았음.

 

 

 

VGG - 16

- 단순한 신경망으로 간결함이 장점. conv = 3 x 3 filter, s = 1, same,   max pool = 2 x 2, s = 2

- 1. 224 x 224 x 3 -> (conv 64) x 2-> 224 x 224 x 64 -> (max pooling) -> 112 x 112 x 64

- 2. 112 x 112 x 64 -> (conv 128) x 2 -> (max pooling) -> 56 x 56 x 128 => (여러번 반복)

- 3. 7 x 7 x 512 ->. (fc 4096) -> (fc 4096) -> softmax, 1000

- vgg-16인 이유는 16개의 레이어/층을 가지기 때문

- 138M 파라미터로 상당히 크나, 일관적임

- 다음 단계로 넘어갈때마다 필터 갯수가 규칙적으로 2배가 됨.

- 더 큰 버전으로 VGG - 19도 있음.

 

 

300x250
728x90

Binary Classification (C1W2L01)

- 신경망 처리시 훈련셋을 for문 없이 어떻게 한번에 처리하나 보자

- 전방향과 역전파 단계가 있음 왜 이렇게 수행하는가 알아보자.

- 이 과정을 이해하기 위해서 로지스틱 회귀부터 학습.

 

 

이진 분류 문제

- 이진 분류 문제는 주어진 데이터를 가지고 무언가인지 아닌지 두가지 경우를 분류함

- 이미지는 3개의 채널을 가진 행렬 형태 아래의 입력 특징 백터는 64 x 64 x 3 = 12288 

- 이진 분류기는 이미지를 학습해서 특징 벡터 x를 받아 y를 예측함. 고양이 이미지인지 아닌지

이번 강에서 사용하는 표기법들

 

 

 

 

 

Logistic Regression (C1W2L02)

- 로지스틱 회귀는 이진 분류 문제로서 입력이 주어질때 1인지 0인지 판별하는 지도학습

- y_hat을 어떻게 구할까? w^t + b = y_hat 선형 함수로 만든다.

- y_hat은 0과 1 사이여야하지만 위의 선형 함수로는 그럴수가 없다

 => sigmoid(w^t x + b) = y_hat 형태로 비선형 활성화 함수를 주자

- sigma(z) : z가 아주 크면 1, 아주 작으면 0이됨.

- 로지스틱 회귀 구현시 y_hat이 잘 추정하도록 좋은 파라미터 w와 b 파라미터 값을 구하여야 한다.

- x 원소의 갯수가 하나가 아닌경우 우측과 같이 계산.

 

* 로지스틱 회귀는 아주 간단한 신경망이라 볼수 있다!

 

 

 

Logistic Regression Cost Function (C1W2L03)

- 지난 시간에 로지스틱 회귀 모델을 살펴봄. 파라미터 w, b를  학습하기 위해서는 비용함수를 정의하여야 함.

- x^i 는 x의 i번째 데이터 예제. 다음으로 손실, 오차 함수 L 정의

- 대표적인 비용 함수로 제곱 오차 함수 MSE 하지만 로지스틱 회귀에서 MSE가 잘 사용되지 않음.

  => 최적화 함수가 컨벡스 함수가 되지 않기 때문. 경사하강법으로 지역/전역 최적값을 찾지 못함.

 - 손실 함수 L은 예측 결과가 얼마나 좋은지 판단. * 하나의 데이터

  => 최적화 문제가 컨벡스, 볼록해지도록 하는 손실함수를 정의하여야함.

 

- 제곱 오차는 오차를 최소화 하려고 할 것임.

- 로지스틱 회귀 비용 함수도 값을 최소화 하려고 할 것.

* 손실 함수 정의에 대해서는 차후에 자세히 다뤄봄.

 

- 비용 함수 cost fucntion : J(w, b) = ... 는 모든 데이터의 비용 함수의 평균으로 현 모델의 예측 결과가 얼마나 좋은지

 

300x250
728x90

About This Course (C1W1L05)

 

- 이 강의의 주제들

Course Resources (C1W1L06)

 

이번 과정 개요

- 소개

- 신경망 프로그래밍 기초, 프레임워크

- 은닉층이 한개인 신경망 만들기

- 심층 신경망 만들기

 

 

과정 관련 자료들

- 토론 포럼

- 연락처 등

 

 

 

 

 

300x250
728x90

C4W1L07 One Layer of a Convolutional Net

- 6 x 6 x 3의 입력과 3 x 3 x 3 크기의 필터가 2개가 주어짐

- 입력과 각 필터를 합성곱 연산을 한 후에 실수 값인 편향을 더해주고  비선형 함수인 relu를 적용

- 위 과정이 합성곱 계층에서의 연산. 이 예시의 경우 4 x 4 x 2의 출력이 나옴.

* 3 x 3 x 3 크기의 필터가 10개라면 => 4 x 4 x 10의 출력이 나온다.

 

- 한 레이어의 파라미터 개수가 몇개일까?

 * 3 x 3 x 3 크기의 필터가 10개가 존재하는 신경망의 한 계층에서

- 3 x 3 x 3(하나의 필터 파라미터) + 1(편향) = 28

- 필터가 10개이므로 10 x 28 = 280개의 파라미터가 한 레이어에 필요하다.

 * 입력 이미지의 크기는 상관없음.

 

 

- 아래의 내용은 합성곱 레이어 입출력에 대한 표기 예시

 

 

 

C4W1L08 Simple Convolutional Network Example

- 39 x 39 x 3 크기의 입력이 들어올때

- 필터크기 : 3, 스트라이드 :1, 패딩 0, 필터 개수 10

 => 특징맵 : 37 x 37 x 10 의 출력이 나옴

* 점점 특징맵 공간적 크기는 줄어드나 채널이 늘어남

- 최종 출력은 7 x 7 x 40

- 최종 출력을 펼친 후 1960개의 특징으로 로지스틱회귀나 소프트맥스 함수로 분류 수행

 

 

합성곱 신경망 레이어 타입들

- 합성곱 레이어

- 풀링 레이어

- 완전 연결 계층

 

 

 

 

 

 

 

 

 

 

300x250
728x90

 

 

 

 

 

 

300x250
728x90

C4W1L05 Strided Convolutions

- stride 는 합성곱 연산에서 자주 사용되는 요소로 몇 칸씩 띄어갈지를 지정

- Conv2D 결과 :  (n + 2p - f) / s + 1 x (n + 2p - f) / s + 1

- 일반 수학에서의 합성곱 : 필터를 x, y 축으로 뒤집은후 곱 합 수행, 딥러닝에서의 합성곱은 교차 상관 cross correlation이라 부름.

- 신경망에서의 합성곱 : 필터를 밀어가면서 곱 합 수행

 

 

 

 

 

C4W1L06 Convolutions Over Volumes

- 입체 공간에서의 합성곱 RGB 이미지의 경우 W x H x 3의 형태를 가짐

- 입력 이미지가 6 x 6 x 3, 필터가 3 x 3 x 3 일떄, 출력은 4 x 4 (x 1)의 형태가 나옴.(별도 패딩이나 스트라이드 지정없을시)

 * 입력 채널과 필터 채널은 동일해야함.

- 빨간색 채널의 수직 에지를 검출하도록 학습한다면. R 필터만 수직 에지 필터, 나머지 G, B는 0으로 학습하면 됨.

- 필터가 채널에 상관없이 수직 에지를 검출 하도록 학습된다면, RGB 필터 모두 수직 에지를 검출하는 필터 형태로 학습된다.

 

 

- 수직 에지만 검출할게 아니라 기울어진 혹은 수평 에지도 검출할 수 있도록 학습하고 싶다.

- 출력 시킬 채널 개수만큼 위의 필터들을 여러개 만들면됨

=> W x H x input channel   *    f_w x f_h x input_channel x output_channel => output_w x output_h x output_channel

- 아래의 경우에는 수직 에지와 수평 에지만 검출할 수 있다면, 출력 채널의 수가 많을 수록 검출할 수 있는 특징들이 많아지겠다.

 

 

 

 

 

 

 

 

 

 

 

300x250

+ Recent posts