728x90

Improving Model Performance (C3W1L01)

- 머신러닝 전략 : 머신러닝 알고리즘의 구성

- 빠르고 효율적인 머신러닝 모델을 만드는 방법 -> 전략을 알아보자.

 

동기부여를 위한 예시

- 고양이 분류 작업에서 90% 정확도로 사용하는데 충분한 성능을 얻었다. 어떻게 더 향상시킬수 있을까?

- 신경망을 향상시키기 위한 방법들

 1. 더 많은 학습데이터를 사용하자.

 2. 다양한 훈련 셋을 모아보자 : 다양한 자세의 고양이 이미지나 다른 종류의 고양이

 3. 경사하강법으로 더 길게 학습해보자

 4. 경사 하강대신에 아담 최적화기를 사용해보자

 5. 신경망을 더 키워보거나 줄여보자

 6. 드롭 아웃을 해보자

 7. L2 규제를 추가해보자

 8. 신경망 아키텍처를 변경해보자 ex. 활성화 함수, 은닉층 유닛 개수

=> 길게 학습한다고 해도 더이상 성능 향상이 이뤄지지 않을때도 있다. 위와 같은 방법들을 시도해 볼 수 있음.

 

 

 

 

300x250
728x90

Building Blocks of a Deep Neural Network (C1W4L05)

순전파와 역전파 함수

- l layer를 중심으로 살펴보자. w^[l], b^[l]

- 순전파 : 입력 a^[l-1], 출력 a^[l], z^[l] = w^[l] a^[l-1] + b^[l], a^[l] = g^[l](z^[l]).

  * z^[l]은 캐싱한다.(역전파때 사용하게 임시 저장함.)

- 역전파 : input da^[l], cache z^[l],   -> output : da^[l-1], dw^[l], db^[l]

=> 역전파 계산시 이전 레이어 da^[l]와 순전파때 캐싱한 z^[l]로 w,b, a에 대한 그라디언트들을 계산한다.

- 입력부터 출력까지 순전파, 역전파 연산 과정을 블록으로 보자.

* da^[0]의 경우 w나 b의 그라디언트, 미분계수를 계산하는데 필요없음.

* 그라디언트 계산에 w, b 도 필요하므로 같이 캐싱하자.

 

 

 

 

 

300x250
728x90

Why Deep Representations? (C1W4L04)

- 왜 심층 신경망이 잘 동작하는지 알아보자

 

심층 표현을 이해하기

- 얼굴 인식, 감지 시스템 구축 시 심층 신경망이 할수 있는 일을 알아보자

- 첫번째 레이어는 특징/에지 검출기 역활을 함. 아래의 그림에서 20개의 은닉층을 시각화 한 결과들을 보여주고 있다.

- 검출된 에지들을 모아 얼굴의 일부분을 찾아낼수/감지해낼 수 있다.

- 서로 다른 얼굴 일부분들을 모아 다양한 얼굴들을 구분할 수 있게 됨.

 

- 스피치 인식 시스템을 만든다고 해보자

- 신경망의 첫번째 레이어에서는 오디오의 저수준 특징들을 찾아낼 것임.

- 이러한 저수진 특징들을 모아 기본 소리 단위들을 만들어냄 -> 단어들을 인식하고 -> 문장을 인지하게 됨.

- 깊어질수록 단순한 표현에서 더욱 복잡한 표현들로 섞이게 됨.

* 사람의 뇌도 에지 단위부터 인식해서 사람의 얼굴을 구분할 수 있음.

회로이론과 딥러닝

- 왜 심층 신경망이 잘 동작하는가에 대해서 회로 이론에서 나옴.

- 회로 이론에서는 서로 다른 회로들을 조합해서 어떤 함수 역활을 수행함.

- L 레이어 작지만(은닉 유닛이 적다) 깊은 심층 신경망에 대한 함수를 얕은 신경망으로 계산하고자 한다면 지수적으로 훨씬 많은 은닉 유닛들이 필요로함.

- 모든 입력에 대한 베타적 논리합을 구하는 함수 구현시, 심층으로 구현한다면 O(log n) 복잡도를 가지나, 심층으로 구현하지 못하고 얕게 구현한다면 모든 경우의 수를 나열해야해서 은닉층이 지수적으로 증가함.

=> 회로 이론을 통해서도 깊게 쌓을수록 더 계산하기 쉽다.

 

 

 

300x250
728x90

Getting Matrix Dimensions Right (C1W4L03)

파라미터 w와 b

- 심층 신경망 구현시 행렬 차원을 잘 확인 해야 한다. 직접 적어가면서 확인해 보자

- L = 5

- z^1 = w^1 x + b^1

- n^[0] = 2, n^[1] = 3, n^[2] = 5, n^[3] = 4, n^[4] = 2, n^[5] = 1

- z^1's shape = (3, 1) = (n^[1], 1)

- x's shape = (2, 1) = (n^[0], 1)

 => w^1's shape = (3, 2) = (n^[1], n^[0])

 => w^l's shape = (n^[l], n^[l-1]) 

- w^3's shape = (4, 5) = (n^[3], n^[2])

 

- bias

 b^[1]'s shape = (3, 1) = z^[1]

 b^[l]'s shape = z^[l]

 

 

벡터화 구현

- w, dw, b, db의 차원은 동일하나 x와 z, a는 변함.

- 단일 샘플에서 z^[l], a^[l] : (n^[l], 1)

- 전체 셋에선 Z^[l], A[l] : (n^[l], m)

- 입력 X = (n^[0], m)

- 심층 신경망 구현시 차원 부분을 놓치다가 버그 발생할 수 있으니 조심하자.

 

 

 

 

 

300x250
728x90

Forward Propagation in a Deep Network (C1W4L02)

심층 신경망에서 순전파 연산

- 첫번째 레이어 연산 

  z1 = w1x + b1

  a1 = g1(z1) = g1(w1x.+ b1)

- 두번째 레이어의 연산

  z2 = w2a1 + b2

  a2 = g2(z2)

- 위는 단일 훈련 샘플에 대한 연산 과정, 전체 훈련 샘플(데이터셋)에 대해 벡터화는 어떻게 구현될까

 Z1 = w1X + b1

 A1 = g1(Z1)

 Z2 = w2A1 + b1

 A2 = g2(Z2)

 ...

- 가능한 반복문을 사용하지 않는것이 좋으나 각각 훈련 샘플에 대해서는 벡터화가 가능하나 각 계층별로는 반복문으로 연산할 수 밖에 없음.

 

 

 

 

 

 

 

300x250
728x90

Deep L-Layer Neural Network (C1W4L01)

심층 신경망이란 무엇일까?

- 아래의 그림에는 로지스틱회귀, 은닉층이 1개(2층), 2개(3층), 5개(6층)인 신경망

- 로지스틱 회귀 모델은 얕은 모델(1층 신경망)이지만, 6층 신경망은 비교적 깊다.

심층 신경망 표기법

- 아래의 그림은 4층 신경망

- L = 4, n^[l] = 해당 레이어의 유닛개수 (ex : n^[0] = n_x = 3, n^[1] = 5, n^[3] = 3)

- a^[l] = 해당 레이어의 활성 결과

 

 

 

 

300x250
728x90

Gradient Descent For Neural Networks (C1W3L09)

- 경사 하강을 동작시키는데 필요한 식에 대해서 알아보자.

 

신경망에서의 경사 하강법

- 파라미터로 각 층의 가중치 행렬과 편향이 있다. w1, b1, w2, b2

- 입력 n0, 은닉층 n1, 출력 n2(하나의 출력값)

- 비용함수 (이진 분류를 하는 경우로 고려) : J(w1, b1, w2, b2) = 1/m L(예측치, 실제치)

 * 손실함수는 하나의 샘플에 대한 예측과 실제치의 차이 평가

- 경사 하강하기

  1. 예측치 계산

  2. 그라디언트 계산

    dw1 = dJ/dw1,    db1 = dJ/db1,  . . . .

  3. 학습 파라미터 갱신 

    w1 = w1 - alpha * dw1 . . .

  4. 반복

 

미분계수 계산 공식

- 우선 순전파 계산 공식

  A1 = g1(z1) = g1(w1x1 + b1)

  A2 = g2(w2A1 + b2)

- 미분 계수 계산, 역전파 단계

  아래의 그림 참조

 

 

 

300x250
728x90

 

Explanation For Vectorized Implementation (C1W3L05)

벡터화 구현 정리하기

- 1, 2, 3번째 샘플들에 대한 첫번째 레이어의 활성 결과들을 구해보자.

- 첫번째 레이어의 편향들은 정리를 위해서 깔끔하게 하기위해서 0으로.

- 첫번째 레이어의 가중치 행렬과 평행하게 쌓은 샘플 데이터의 행렬 곱 연산으로 한번에 Z를 구할 수 있다.

여러 훈련 샘플을 이용한 벡터화 연산 정리

- 벡터화를 통해서 좌측 상단의 반복문을, 행렬곱 연산으로 바꾸어 빠르게 처리가 가능해짐.

 

300x250
728x90

Vectorizing Across Multiple Examples (C1W3L04)

- 여러 훈련 샘플을 벡터화 하여 한번에 처리하기

- 지난 시간에는 하나의 샘플에 대해 신경망 출력을 구하는 과정을 보았으나 이번에는 훈련 셋 전체를 한번에 하는 과정을보자.

- 벡터화처리하지 않는다면 모든 훈련 샘플에 대해서 반복문을 통해서 계산하여야 함.

- 길이가 n_x인 벡터 x^i를 수평 방향으로 쌓아 n_x x m 크기의 훈련셋 X를 준비함.

- 가중치 행렬과 훈련셋 X를 점곱 -> +편향 -> 시그모이드를 적용하여 활성 출력을 구한다.

- A의 행은 #번째 은닉 유닛의 결과, 열은 #번째 훈련 샘플에 대한 결과

 

 

300x250
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

+ Recent posts