1. Activation Functions 이제는 activation function으로 sigmoid를 사용하지 않는다. 거의 모든 경우에 대해서 tan h를 activation function으로 사용하는 것이 더 좋기 때문이다. tan h는 sigmoid와 달리 non-linear한 내용에도 적용될 수 있다. 단, output layer의 activation function으로 sigmoid를 사용하는 것이 tan h를 사용하는 것보다 편리한 경우가 예외로 존재한다. 이때는 y(label)이 0 또는 1로 구분되는 이진분류인 경우인데, y hat의 범위가 -1에서 1인 것보다 0에서 1로 나오는 것이 더 좋기 때문이다. 따라서 hidden layer의 activation function은 sigmo..
Neural Networks and Deep Learning
1. Neural Networks Overview What is a Neural Network? 앞선 강의들에서 배운 내용을 정리한 것이다. 입력 x를 가중치 w와 곱하고 편향 b를 더한 것을 z로 정의한다. 이 z에 시그모이드 함수를 적용하면 output이 된다. 만약 layer가 깊어지면 z가 새로운 입력이 되어 새로운 가중치 및 편향과 계산을 하게 된다. 변수의 우측 상단에 적힌 [ ] 안의 숫자는 몇 번째 layer에 속하는지를 나타내고 있다. 빨간색 화살표는 back-propagation을 뜻한다. 2. Neural Network Representation hidden layer: 어떤식으로 학습이 이루어지는지 우리가 직접 볼 수 없는 layer다. logistic regression에서는 a가..
1. Nerual Network Basics(Quiz) y hat은 input x가 주어졌을 때 y = 1일 확률이다. logistic loss는 y와 y hat 값이 주어지면 공식을 통해 그 값을 구할 수 있다. boradcasting은 두 행렬의 사이즈 중 일치하는 것을 제외한 나머지 중 큰 것을 기준으로 삼아 확장해주는 기능이다. X의 차원은 열 개수 x 행 개수로 구해진다. for-loop를 vectorize할 때는 matrix의 size를 고려하여 쉽게 구할 수 있다. 2. Python Basics with Numpy sigmoid 구현하기 np.exp 함수를 이용하여 sigmoid 함수를 정의할 수 있다. parameter에 vector가 들어오면 각 원소에 대해 함수를 적용하여 vector를..
1. Broadcasting in python Boradcasting example 세 개의 행 중에서 Carb가 차지하는 비중을 for-loop 없이 해결하는 코드를 작성해보자. 각 열의 값들을 모두 더하여 구한 값으로 각 원소들을 나눠준 뒤 100을 곱하면 percentage를 구할 수 있다. 이를 for-loop가 아닌 built-in function으로 구현하면 위 사진의 맨 아랫 부분 두 줄의 코드에 해당한다. sum(axis=0) 함수를 사용하면 2차원의 matrix에 대해 '세로로' 합을 구해준다. 즉 각 열의 합을 더하여 (4,) 사이즈의 vector가 되는 것이다. 마지막으로 reshape(1,4)는 vector의 사이즈를 2차원인 (1,4)로 조정해주는 것인데 사실 쓰지 않아도 자동적으..
1. Vectorization gradient descent를 통해 값을 update하는 과정의 속도를 빠르게 만들어주는 방식이 vectorization이다. 단순히 python의 for loop를 사용하는 것이 아니라 numpy의 dot를 통해 vector인 w와 x를 빠르게 연산해준다. n차원으로 이루어진 벡터 w,x를 계산하는 것은 np.dot을 이용하는 것이 for loop를 이용하는 것보다 약 300배 이상 빠르다. 이는 강의 내 주피터 노트북을 이용한 실습을 통해 확인할 수 있었다. 이를 explicit for loop의 사용을 피하고 build in functions 사용을 지향하는 것으로 표현할 수 있다. 처음에는 for loop 내에서 왜 z에 저장되는 값을 계속 더해야하는가 했는데 여기..
1. More Derivative Examples 미분은 x축의 방향으로 아주 조금 움직였을 때 y축에서의 변화가 어떻게 될지 보여준다. 위 예시에서는 a의 값이 0.001(아주 작은 값)만큼 움직이면 f(a)는 얼만큼 움직이게 되는지 표현되어있다. f(a)가 많이 움직일수록 그래프에서의 slope(경사)가 급한 것으로 이해할 수 있다. 위 예시들의 미분값을 보면 a에 따라서 그 미분값(slope)도 다르다는 것을 알 수 있다. 즉, 함수의 형태에 따라 미분값이 변화하는 정도나 패턴도 다르다는 것이다. 어떤 식을 미분한 결과가 무엇인지 알지 모른다면 쉽게 검색하거나 교과서를 펼쳐보고 결과를 확인할 수 있다. 이전에 쌓아놓은 것이 없어 모른다면 검색해서 파악해두도록 하자. 2. Compuation Grap..