728x90

Neural Network Overview (C1W3L01)

- 신경망을 어떻게 만들어내는지 간략하게 보자.

- 입력 x, 가중치 w, 편향 b로 출력 z를 구하고, 활성화 함수로 활성 값 a를 구함.

- 그 다음 활성 결과 a와 타겟 y를 통해 비용을 구하자.

 

 

 

 

 

Neural Network Representations (C1W3L02)

- 신경망 표현들에 대해서 살펴보자.

- 입력층, 은닉층, 출력층

- 훈련셋은 입력 x와 출력  y로 구성.

- 아래의 예시는 2층 신경망. 입력층을 세지 않음.

- 각 은닉층 유닛에는 대응되는 가중치와 편향값들을 가짐.

 

 

 

Computing Neural Network Output (C1W3L03)

- 지난 시간 은닉층이 하나인 신경망을 봄. 이번에는 어떻게 신경망이 출력을 계산하는지 자세히 살펴보자.

 * 로지스틱 회귀 연산 과정을 여러번 반복함.

- 위 이미지의 연산 과정을 3, 4번째 은닉 유닛 계산에도 동일하게 수행됨.

- 가중치 행렬과 편향을 더하고, 시그모이드를 적용하여 출력 벡터 z을 구함.

- 두번째 은닉층 계산만 보면 로지스틱 회귀와 유사함.

- 훈련셋을 열로 쌓으면 한 훈련 샘플이 아닌 전체 훈련셋으로 계산 가능

 

300x250
728x90

Vectorizing Logistic Regression (C1W2L13)

- 로지스틱 회귀를 벡터화해서 전체 셋에 대해서 반복문 없이 경사 하강을 구현해보자.

- m개의 예측셋이 있고 각각의 예측값들을 아래와 같이 구함.

- 순전파 단계시 m개의 예측값을 벡터화를 통해 한번에 계산.

- 벡터화는 역전파 계산에서도유용하게 사용됨.

 

 

 

Vectorizing Logistic Regression's Gradient Computation (C1W2L14)

벡터화를 통한 로지스틱 회귀 그라디언트 계산

- 좌측은 비벡터, 우측은 벡터화 계산

로지스틱 회귀 구현

- 좌측 비벡터화 순전파 역전파, 우측 벡터화 순전파 역전파 계산

- 구현 시 가능한 루프를 사용하지 않아야하나, 학습을 진행하기 위해서 루프 사용이 필요함.

300x250
728x90

Vectorization (C1W2L11)

- 벡터화는 간단하게 코드에서 루프문을 없애주고, 큰 데이터를 학습 시 빠르게 만들어주며 매우 중요함.

 

무엇이 벡터화인가?

- 로지스틱 회귀 z = w^t x + b였으나 w와 b가 하나의 실수가 아니라 여러 개의 실수를 가진 벡터로 사용할 수 있음.

- 벡터로 처리시 루프문 없이 한번에 점곱 연산으로 곱샘 가능.

- CPU, GPU 둘다 병렬 처리 명령어를 가지고 있음.

- numpy는 병렬 처리 계산에 좋은 라이브러리

=> 가능한 루프문을 쓰지 말자

 

 

 

More Vectorization Examples (C1W2L12)

신경망 프로그래밍 가이드라인

- 지난 시간 벡터화를 통해서 루프를 사용하지 않았음. 가능한 루프를 명시적으로 쓰지말자

벡터와 행렬에 대한 함수

- 벡터, 행렬의 모든 원소에다가 지수 연산을 적용시켜보자.

- numpy로 루프문 없이 모든 원소에다가 한번에 할 수 있다.

 

 

 

로지스틱 회귀의 미분 계수를 구하기

- for 문을 제거하기 위해 아래 식의 dw1, dw2를 없에고 dw를 벡터로 만들어 계산하자.

- 이 과정으로 루프문 하나만 제거해도 좋지만 두 루프를 제거하여 더 성능을 높일수가 있었다.

 

 

 

 

 

 

 

300x250
728x90

 

Logistic Regression Gradient Descent (C1W2L09)

로지스틱 회귀 복습

- 로지스틱 회귀에 사용할 계산 그래프로 경사 하강 구현하기

- 비용함수 L(a, y)를 줄이도록 파라미터들을 학습하자.

로지스틱회귀 미분계수 구하기

- 다운스트림 그라디언트 = 로컬그라디언트 * 업스트림 그라디언트 (체인룰) 

- w1 := w1 - alpha * dw1

- w2 := w2 - alpha * dw2

- w3 := w3 - alpha * dw3

 

 

 

 

Gradient Descent on m Examples (C1W2L10)

m개의 데이터를 이용한 로지스틱 회귀

- 지난시간에는 1개의 샘플에 대했다면 이번에는 m개의 샘플을 다뤄보자.

- m개의 데이터에 대한 dw1의 평균을 구하면 dw1를 구할 수 있다.

- 아래의 슬라이드는 경사하강의 한단계 수행한 것이며, 여러 단계를 거쳐 최적점에 도달해야함.

- 신경망 알고리즘 구현시 명시적으로 루프 문을 돌리면 효율성이 떨어짐.

- 루프를 명시적으로 해서 각 데이터를 처리하는 것이 아니라 백터화를 통해 묵시적으로 큰 데이터를 처리하는것이 중요함.

 

 

300x250
728x90

Computation Graph (C1W2L07)

- 계산 그래프는 순방향 연산을 통해 신경망 출력을 구하고, 역전파 단계에서 그라디언트를 구함.

- 계산 그래프는 아래의 그림에서 J와 같은 특정 출력 변수를 최적화 하길 희망할때 사용 

- 로지스틱회귀라면 J는 비용함수일 것임.

- 왼쪽에서 오른쪽으로 가면서 J를 구하였음.

 

 

 

Derivatives With Computation Graphs (C1W2L08)

- 계산그래프를 이용하여 함수 J에 대한 미분 계수를 어떻게 구하는지 알아보자

- d/dv J = 3

- 최종 출력 변수 값에 대한 각 변수들의 미분 계산들을 한 단계씩 역방향으로 나아감.

- chain rule : d/da J = 3 = d/dv J * d/da v 

- d/db J = d/dv J * d/du v * d/db u = 3 * 1 * 2 = 6

 

 

 

 

300x250
728x90

What is end-to-end deep learning? (C3W2L09)

- 딥러닝 분야에서 큰 발전으로 end-to-end 딥러닝이 있음.

- 데이터 처리 혹은 학습 시스템은 다양한 처리 과정이 있으나 end-to-end 딥러닝은 다양한 단계를 받아 하나의 신경망으로 처리

 

 

end-to-end 학습의 예시

- 스피치 인식 예시

- x : 음성 파일, y : 대폰

- 기존의 음성 인식 시스템은 여러 처리과정으로 구성

 * audio -> MFCC로 음성 파일의 특징을 추출함 -> ML 알고리즘으로 음소들을 알아냄 c, a, t -> 음소들로 단어로 만듬 cat -> 대본

- end-to-end 딥러닝은 음성 파일 x -> 대본 y를 바로 구할 수 있음.

- 기존의 파이프 라인 한 단계 단계 마다를 오랜 시간 연구해 왔엇음

 => end-to-end 딥러닝을 통해 많은 데이터셋으로 x에서 y를 구할수있게됨.

- 문제는 많은 데이터가 필요함.

* 이 예시에서는 3,000h 데이터보다 10,000h, 100,000h 더 많을수록 더 좋은 성능을 보임.

얼굴 인식

- 아래의 사진은 Baidu의 Yunci Lin이 개발한 얼굴 인식기

- 접근하는 사람을 보고, 자동으로 지나갈 수 있게함. RFID 없이 사용가능.

- 어떻게 이런 시스템을 만들까?

- 우선 이미지를 보자 -> 누군가 접근함 . 이미지 x, 이미지 x로 사람 신원 y를 구해야함.

 * 하지만 사람이 다양한 방향에서 오거나 가까이서 찍힐수가 있음.

- 그래서 바로 이 이미지를 신경망에다가 넣는게 아니라, 오늘날 쓰이는 방법은 여러 단계로 나누어 얼굴 인식 소프트웨어로 사람얼굴을 가져옴. -> 얼굴을 줌인 해서 키움. -> 신경망에 넣어 사람의 신원을 알아냄. 

- 하나의 신경망으로 하는것보다 두 간단한 단계로 해결할수 있음. 첫번쨰에는 얼굴이 어디인지 찾아내고, 두번쨰에는 누구인지 알아냄. => 더 나은 성능을 얻을 수 있다.

- 왜 두 단계로 나누었을때 더 좋은 성능을 얻을까?

 1. 각각의 문제가 간단해짐

 2. 데이터들이 각각의 작업에 적합함.

  * 첫번째 이미지의 경우 사람의 얼굴이 어디있는지 찾아내는대 적합함

- 하지만 이 모든것을 한번에 학습한다면 (x, y)형태의 이미지가 적을 것임.

- end-to-end 학습으로 문제가 풀기에는 데이터가 부족할 수 있으나, 여러 단계로 나누어서 처리하면 더 나은 성능을 보일 수 있음.

다른 예시

1. 기계 번역

- 복잡한 파이프라인으로 구성됨 

- english -> text analysis -> . . .  -> French

- english -> french

- 이 경우 데이터가 많아 end-to-end는 잘동작함

 

2. 엑스레이로 나이 추정

- end-to-end가 아니라면 image -> bones 뼈들의 개수, 위치, 각 길이 등 고려 -> 나이

- end-to-end로 image -> age를 바로 구하려면 아주 많은량의 데이터가 필요함.

 

 

 

 

 

Whether to Use End-To-End Deep Learning (C3W2L10)

- 머신러닝 시스템 설계시 end-to-end 딥러닝을 사용할 수 있음. 이것의 장단점을 알아보자.

 

end-to-end 딥러닝의 장단점

1. 장점

- 충분한 데이터가 있으면, x -> y로 만드는 함수를 어떻던 간에 신경망 모델로 찾아낼 수 있음.

 * 이전의  음성 인식은 음소 단위로 다룸. 

 * 알고리즘이 원하는 표현하는 표현을 알아서 직접 학습하면 음소 개념을 사용하지 않고 성능 향상시킬 수 있음.

- 직접 요소들을 설계할 필요가 줄어듬

 

2. 단점

- 아주 많은 량의 x, y 데이터가 필요함.

 * 한쪽 끝 input end 에서 시작해서 반대쪽 끝 output end까지 가기 때문

- 유용한 직접 설계 요소를 무시함.

 * 정보가 부족한 경우 알고리즘이 중요한 영감을 구하지 못함. 

 * 사람이 직접 설계하는 요소들로 알고리즘 모델에 지식을 줄수 있으나 하지 못함.

 * 직접 요소 설계하는것은 유용할수 있으나 더 나은 표현 방법이 있는데도 강제로 음소를 학습하도록한다면 성능에 좋지 않음.

 

 

end-to-end 딥러닝 사용하기

1.end-to-end 딥러닝

- 새 머신러닝 시스템을 end-to-end로 설계할지 결정할때, x에서 y를구하는데 충분한 양의 데이터가 있는가를 고려하여야함.

- xray 손이미지로 나이를 구하려면 아주 많은 데이터가 필요할 것임.

2. end-to-end가 적절하지 않은 경우

- 자율주행의경우 이미지, Radar, Lidar -> 차량, 입력 찾음 -> 경로 계산 -> 차량 제어

- 차량, 사람 검출운 딥러닝으로 할수 있음. 하지만 차량이나 사람들이 어디로 가는지, 내 차가 어디로 가는지는 다른 소프트웨어(모션 플랜)로 구현.

- 지도 학습 구현시 어떻게 x, y를 연관 시킬지, 어떤 작업을 위한 데이터를 얻는지 고려해야함

- 이미지를 받아 end-to-end 학습을 통해 차량 조종까지는 효과적인 방법은 아님.

 

=> end-to-end 학습을 사용하기 전에 사용하기에 적절한 문제인지 잘 고려하자

 

 

300x250
728x90

 

 

towardsdatascience.com/understanding-region-of-interest-part-1-roi-pooling-e4f5dd65bb44

 

Understanding Region of Interest — (RoI Pooling)

Quick and easy explanation of what is RoI Pooling and how it works? Why do we event using it in Fast R-CNNs?

towardsdatascience.com

 

 

 

towardsdatascience.com/understanding-region-of-interest-part-2-roi-align-and-roi-warp-f795196fc193

 

Understanding Region of Interest — (RoI Align and RoI Warp)

Visual explanation of how RoI Align works and why is it better than standard RoI Pooling?

towardsdatascience.com

 

 

 

 

 

300x250
728x90

TensorFlow2 API로 모델 설계하는 방법

1. Sequential Model

- 순차적으로 차곡차곡 쌓아간다

from tensorflow import keras
model = keras.Sequential()
model.add(레이어)
....
model.fit(x, y, epochs=에폭, batch_size=배치사이즈)

2. Functional API

- 입력, 출력을 통해 모델을 정의

from keras
inputs = keras.Input(shape=(형태))
x = keras.layers.레이어(파람)(x)
...
outputs = keras.layers.레이어(파람)(x)

model = keras.Model(inputs=inputs, outputs=outputs)
model.fit(x, y, 에폭,배치사이즈)

 

3. Subclassing

- 모델 클래스 정의

from tensorflow import keras

class Model(keras.Model):
	def __init__(self):
    	super(Model, self).__init__()
        self.레이어()
        ...
    
    def call(self, x):
    	x = self.레이어(x)
        ...
        x = self.레이어(x)
        retun x

model = Model()
model.fit(x, y, 에폭, 배치사이즈)
300x250
728x90

Derivatives (C1W2L05)

- slope = derivate 

- slope of f(a) at a = 2 -> 3

 => d f(a)/ da = 3 = d/da f(a)

 

 

More Derivative Examples (C1W2L06)

미분계수 이해하기

- 복잡한 미분 계수들을 살펴보자

- f(a) = a^2인 경우 a =2, 5에서의 기울기, 미분ㄱ derivative

- a = 2 -> d/da f(a) = 4

- a = 5 -> d/da f(a) = 10

 

더 많은 미분계수 예시

- f(a) = a^3 -> d/da f(a) = 3a^2

- f(a) = log_e(a) -> d/da f(a) = 1/a

- derivative of function = slope of function

- slope of function can be different at different point of function

 

 

 

 

 

 

 

300x250
728x90

Gradient Descent (C1W2L04)

경사 하강

- 손실 함수 : 단일 훈련셋이 잘 예측되었는지, 비용 함수 : 전체 셋이 잘 예측되었는지   (매개변수 w, b 를 잘 학습하여)

- J(w, b)를 최소화 하는 w, b를 찾아야 함.

 * w는 보통 더 큰 차원을 가지나 이 예시에서 w, b를 하나의 실수로 봄.

 * 여기서 함수 J(w, b)는 컨벡스 함수로 비용 함수로 사용할 수 있음.

- 경사 하강법을 통해서  초기화 지점으로부터  전역적 최저점까지

 

경사 하강

- w에 대한 차원으로 보자

- w := w - alpha * d J(w)/ dw

- alpha : 학습률

- dw = d J(w) / dw,  미분 계수, 비용 함수 값에 대한 w의 기울기

 => w := w - alpha dw

- 미분 계수는 w의 위치에 따라 양수나 음수가 되어 w를 증가시키거나 감소시켜 전역적 최적점에 도달함.

- d는 일변수 함수에 대한 미분시 사용. 

- 코드 구현시 관습적으로 미분계수를 dw, db와 같이 표기

 

 

 

 

300x250

+ Recent posts