ML
[TIL] 210406 - Deep LearniNg (~C1W3L05)
이 글은... Andrew Ng 교수의 Deep Learning 강좌 C1W3L05 까지의 내용을 정리한 것이다. 많은 입력 샘플에 대한 신경망 네트워크를 백터화 하는 방법을 설명합니다. 내용 요약 많은 샘플에 대한 벡터화 m개 샘플이 있을 때, for i in range(m): z_1[i] = W_1 * x[i] + b_1 a_1[i] = sigma(z_1[i]) z_2[i] = W_2 * a_1[i] + b_2 a_2[i] = sigma(z_2[i]) 이런 식으로 샘플을 순환하며 계산해야함을 알 수 있다. 당연히 for 문은 효율이 떨어지므로 벡터화하여 계산하는 것이 빠르다. 각각의 중요 벡터의 형태를 살펴보면 아래와 같다. 여기에 $W$ 벡터와 $b$ 벡터가 빠졌는데, $W$ 벡터의 형태는 (은닉 ..
[TIL] 210405 - Deep LearniNg (~C1W3L03)
이 글은... Andrew Ng 교수의 Deep Learning 강좌 C1W3L03 까지의 내용을 정리한 것이다. 신경망 네트워크의 구성과 대략적인 계산 흐름을 살펴보았다. 내용 요약 신경망 네트워크의 구성 알아보기 신경망은 아래 그림과 같이 3개의 층으로 구별할 수 있다. 입력층: 학습 데이터의 입력 특성들의 층이다. 은닉층: 입력층과 출력층 사이에 있는 층, 데이터를 확인할 수는 없다. 출력층: 출력 특성들의 층이다. 신경망 네트워크의 층을 표기할 때는 $a^{[l]}$라고 쓴다. 여기서 $l$이 층 수를 의미한다. 입력층은 0층이다. 신경망 네트워크의 층수를 셀 때 입력층은 포함하지 않는다. 위 그림에서 층은 3개로 구분되지만 2층 신경망이라 부른다. 신경망 네트워크 출력의 계산 위에서 살펴본 은닉..
[TIL] 210401 - Deep LearniNg (~C1W2L18)
이 글은... Andrew Ng 교수의 Deep Learning 강좌 C1W2L18 까지의 내용을 정리한 것이다. NumPy를 사용할 때 주의할 점과 문제를 예방하는 법을 알아보았다. 그리고 로지스틱 회귀의 비용함수가 유도되는 과정을 공부하였다. 내용 요약 파이썬과 NumPy 벡터 NumPy를 이용해서 벡터를 만들 때 흔히 실수할 수 있는 예시를 들었다. 크기가 5인 정규분포를 가지는 벡터를 만들려면 아래와 같이 입력한다. >>> a = np.random.randn(5) >>> print(a) [ 0.68386802 0.36410561 -0.67967483 -0.83958757 -2.05102972] 언뜻 보면 (1, 5) 크기의 행렬 같지만 그렇지 않다. >>> print(a.shape) (5,) 여기..
[TIL] 210331 - Deep LearniNg (~C1W2L15)
이 글은... Andrew Ng 교수의 Deep Learning 강좌 C1W2L15 까지의 내용을 정리한 것이다. 로지스틱 회귀의 경사 계산을 벡터화해보고 NumPy의 브로드캐스팅 원리를 파악한다. 내용 요약 로지스틱 회귀의 경사 계산을 벡터화 하기 이전에 for 문을 이용한 경사 계산 pseudo 코드를 아래와 같이 적었었다. J = 0 dw_1 = 0 dw_2 = 0 b = 0 for i = 1 to m: z[i] = w_t * x[i] + b a[i] = sigmoid(z[i]) J += -(y_1 * log(a[i]) + (1 - y[i]) * log(1 - a[i])) dz[i] = a[i] - y[i] # 이곳에 for문 들어가게됨 dw_1 += x_1[i] * dz[i] dw_2 += x_2..
[TIL] 210330 - Deep LearniNg (~C1W2L13)
이 글은... Andrew Ng 교수의 Deep Learning 강좌 C1W2L13 까지의 내용을 정리한 것이다. 벡터화가 무엇이고 어떻게 사용하는지 살펴본다. 내용 요약 벡터화 (Vectorization) 순차적으로 계산하는 것보다 동시에 분산해서 처리하는 것이 훨씬 빠른 결과를 낼 수 있다. 예시로든 코드를 직접 실행해보니 for 문은 약 600ms, 벡터화를 사용한 코드는 약 2ms의 시간이 걸렸다. import numpy as np import time a = np.random.rand(1000000) b = np.random.rand(1000000) tic = time.time() c = np.dot(a, b) toc = time.time() print(c) print("Vectorized ve..
[TIL] 210329 - Deep LearniNg (~C1W2C10)
이 글은... Andrew Ng 교수의 Deep Learning 강좌 C1W2L10 까지의 내용을 정리한 것이다. 계산 그래프를 이용해서 미분 해보고 이를 로지스틱 회귀의 경사하강법에 적용해 보았다. 내용 요약 계산그래프로 미분하기 파라미터 $a$, $b$, $c$가 $J$의 결과값에 어떤 영향을 미치는지 알아낼 수 있음 위 그래프의 오른쪽에서 왼쪽으로 미분을 이용하여 파라미터 관계를 알아내는 방법을 설명함 이 때 미분의 연쇄법칙을 이용함 ${dJ \over da} = {dJ \over dv}{dv \over da}$ Andrew Ng 교수는 코드에서 미분값을 의미하는 변수를 선언할 때 아래처럼 표기하기로 함 $d Finaloutputvar \over dvar$ --> dvar 로지스틱 회귀의 경사하강법..
[TIL] 210326 - Deep LearniNg (~C1W2L07)
이 글은... Andrew Ng 교수의 Deep Learning 강좌 C1W2L07 까지의 내용을 정리한 것이다. 비용함수의 결과값을 최저로 만드는 파라미터를 어떻게 찾아야 하는지 설명한다. 그리고 그 과정에 필요한 미분의 개념을 간단히 살핀다. 내용 요약 경사 하강법 비용함수의 값을 최소화하는 $w$와 $b$를 찾는데 사용할 수 있는 방법이다. 이때 비용함수는 볼록한(convex) 형태여야 한다. 만약 비용함수의 형태가 볼록하지 않다면 지역 최솟값을 여러 개 가지게 되어 진짜 최솟값을 찾기 어려워진다. 비용함수의 최솟값을 찾기 위한 시작점은 임의로 정하여도 상관없다. 경사 하강법을 사용하면 어디에서 시작하든 최솟값이 있는 곳으로 향하게 된다. 가파른 방향으로 한 스텝씩 업데이트하며 최솟값을 찾아간다. ..
[TIL] 210325 - Deep LearniNg (~C1W2L03)
이 글은... Andrew Ng 교수의 Deep Learning 강좌 C1W2L03 까지의 내용을 정리한 것이다. 로지스틱 회귀와 비용 함수에 대한 내용을 다룬다. 내용 요약 신경망 학습방법 정방향 전파 역방향 전파 이 두가지가 어떻게 다른지는 이후에 다루게 됨 일단은 이런 것이 있다는 것을 알고 넘어감 이진분류(Binary Classification) yes or no로 분류하는 것 고양이가 맞다. / 고양이가 아니다. 로지스틱 회귀(Logistic regression)라는 알고리즘을 사용함 표기법 정리 $m$: 학습을 위한 데이터 세트 수 ${(x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), ... (x^{(m)}, y^{(m)}), }$ $n$: 입력 데이터 하나의 원소 개수 ..