전체 글

전체 글

    수식을 그래프로 그릴 때 필요한 툴

    수식을 그래프로 그릴 때 필요한 툴

    딥러닝 공부를 하던 중 그래프를 그리고 싶다는 생각이 들어서 그래프를 그릴 수 있는 툴을 찾아보았습니다. 더 많은 전문적인 툴이 있겠지만 여기서는 제가 사용해본 툴 2가지만 소개합니다. Windows 10 기본 계산기 장점 최신 Windows 10을 사용하고 있다면 별도의 설치 없이 바로 사용 가능하다. 단점 표현하지 못하는 함수가 있다. 윈도10 20H2 버전부터 계산기에 그래프 기능이 정식으로 추가되었습니다. 사용하기에 어렵지 않고 보기에도 깔끔해서 가끔 사용하곤 했습니다. 다만, 제가 잘 모르는 것인지 아니면 지원하지 않는 것인지 모르겠지만 max 함수 표현을 못 하더군요. $y=max(0,x)$ 이런 식 말이지요. 그래서 저는 다른 툴을 찾아볼 수밖에 없었습니다. Desmos 장점 Windows ..

    [TIL] 210410 - Deep LearniNg (~C1W3L07)

    [TIL] 210410 - Deep LearniNg (~C1W3L07)

    이 글은... Andrew Ng 교수의 Deep Learning 강좌 C1W3L07까지의 내용을 정리한 것이다. 활성화 함수의 종류와 비선형 함수를 사용해야 하는 이유에 대해 알아보았다. 내용 요약 활성화 함수 활성화 함수는 여러 종류가 있을 수 있다. 지금까지는 시그모이드 함수만 다루었는데, 이를 대체할 수 있는 대표적인 활성화 함수를 알아보았다. Tanh $a={{e^{z}-e^{-z}}\over{e^{z}+e^{-z}}}$ 형태가 시그모이드와 유사하게 생겼다. 원점을 지나고 기울기가 다르다. 출력값 범위가 -1과 1 사이이다. 평균이 0이기 때문에 데이터가 원점을 중심으로 이동하게 된다. ReLU (Rectified Linear Unit) $a=max(0,z)$ 활성화 함수 입력값이 0보다 클 때 ..

    [TIL] 210406 - Deep LearniNg (~C1W3L05)

    [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)

    [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)

    [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 로지스틱 회귀의 경사하강법..