ML lab 10 DeepLearning

이미지
lec10-1: Sigmoid 보다 ReLU 전에 공부했던 것을 정리하자면, activation function은 값이 다음 레이어로 넘어갈 때 범위 안의 값으로 변환시켜주는 함수이다.  위와 같이 sigmoid 함수로 다음 레이어에 값을 넘겨주는 것을 알 수 있다. 위 그림처럼 한 개의 x만 입력 값을 받는 것이 아니라 여러 값을 받을 수도 있다. 위 그림처럼 3개의 레이어를 만들어 한개의 input layer,output layer, hidden layer로 설정할 수 있다.   레이어에서 다음 레이어로 넘어갈 때 활성화 함수를 거쳐서 값을 변환시킨 뒤 넘겨야한다. 그러나 전 layer의 output 갯수와 다음 layer의 input 갯수는 맞추어야 한다. 이러한 과정을 tensorboard로 나타내려면 아래와 같은 코드를 써야한다. 텐서보드로 보면 코드로 보는 것보다 훨씬 직관적이고 이해하기 쉽다. 마지막으로 sigmoid를 이용해 결과를 출력해보면 아래와 같은 낮은 정확도를 보인다. 낮은 정확도를 보이는 이유를 분석해보자. sigmoid는 양의 정수가 커지면 커질수록 최대 1로 다가가기 때문에 1보다 작은 값들을 곱해나가다보니 너무 작은 수가 되버린다. 그래서 나온 활성화 함수가 ReLU이다. ReLU의 그래프는 아래와 같다. 양의 정수가 커지면 커질수록 더 큰 값을 갖게되는 함수를 만들었다. 그리고 sigmoid 대신에 ReLU 함수를 써보면 코드는 아래와 같다. 마지막에는 digmoid 함수를 쓴다. 왜냐하면 입력을 받을 때 0과 1 사이의 값으로 받기 때문이다 . ReLU를 쓰고 정확도를 체크해보니 100프로가 나온 것을 알 수 있다. ReLU 말고도 아래와 같이 더 많은 활성화 함수가 존재한다. lec10-2: Weight 초기화 위 문제는 lay...

ML lab 09 DeepLearning

이미지
lec9-1: 딥넷트웍 학습 시키기(backpropagation) 이번 강의에서는 w1,w2,b1,b2를 어떻게 학습시킬수 있을까에 대해 알아보자. 딥러닝에서도 gradient descent같은 cost function을 이용한다. gradient descent를 이용하려면 모든 노드의 미분값을 알아야한다. 하지만 모든 노드를 계산하려면 너무 복잡하다. 그래서 backpropagation이라는 개념이 나온다. 위와 같이 미분값을 넘기면서 chain rule을 통해 각 노드의 미분 값을 쉽게 알 수 있다. 텐서플로우의 텐서보드는 위 그래프처럼 노드들을 만들어 backpropagation을 보다 쉽게 구현할 수 있도록 만들어놨다. lec9-2: Tensor Board로 딥네트웍 들여다보기 텐서보드로 그래프 형태로 코드를 들여다 볼 수 있다.  네트워크가 커지고 수행 시간이 오래 걸리다 보면 에러 찾기가 힘들다. 텐서플로우는 텐서보드라는 해결책을 제시한다. 사용법은 간단하다.  위와 같은 예시를 통해 간단한 사용법을 알 수 있다. 우선 summary 정보들을 모아 writer를 생성한뒤 writer operation을 실행시키는 것이다. 그리고 텐서보드를 실행시킨다. 위처럼 layer별로 분류하여 코딩을 하는 것이 좋다.  그리고 변수에 labeling을 하는 것이 중요하다. 모든 summary를 합치고 summarywriter을 실행시킨다. 마지막으로 세션을 실행시키면서 텐서보드에 출력시킨다. 텐서플로우는 그래프화시켜서 backpropagation이 수월하도록 만들었다. 또한 변수의 히스토그램을 그래프로 볼 수 있는 장점이 있다. 디버깅이라고 하기엔 굉장히 좋은 툴이다. 수치로 표현하는 것이 아니라 시각적으로 표현하면서 한 눈에 알 수 있도록 만들었다.

ML lab 08 DeepLearning

이미지
lec 08-1: 딥러닝의 기본 개념: 시작과 XOR 옛날 연구원들이 컴퓨터를 만들어 위 세가지 로직을 실행시켜봤을 때, or 와 and는 구현시킬 수 있었으나 xor은 구현하지 못했다. 하지만 paul에 의해 새로운 방법론이 제기돼었다. paul에 의해 multi NN에서 output에서부터 input쪽으로 error를 보내면서 error를 고치는 backpropagation이라는 방법이 제시됐다. 처음에 묻히다가 Hinton에 의해 재발견되어 주목을 받기 시작했다. 하지만 backpropagation에서 다른 문제가 발생한다. 많은 layer를 가진 NN에서 backpropagation이 에러를 잘 전달하지 못한다는 것이다. 나중에는 SVM이나 RandomForest같은 간단한 알고리즘이 더 높은 정확도를 갖는 결과를 갖게 되었다. lec 08-2: 딥러닝의 기본 개념2: Back-propagation 과 2006/2007 '딥'의 출현 CIFAR이라는 단체에 의해 뉴럴 네트워크는 큰 발전을 하게 된다. 2006년과 2007년에 이름을 딥러닝으로 바꾸고 위 2개의 논문에 의해 큰 발전을 하게 된다. 첫번째는 초기값에 대한 중요성을 강조했다. 두번째는 더 복잡한 layer에 더 높은 효과를 갖는다는 것을 강조했다. 앞으로 더 자세히 발전된 딥러닝에 대해 알아볼 것이다.

ML lab 07 DeepLearning

이미지
lec 07-1: Learning rate, Overfitting, Regularization 우선 Learning Rate에 대해 간단히 알아보면, gradient descent에서 한번씩 움직일 때, 한번 움직이는 정도를 learning rate라고한다. 움직이는 정도가 너무 커버리면 최소화를 넘어버리는 경우가 발생한다. 그러나 너무 작으면 시간이 오래 걸린다. 그러므로 적당한 learning rate를 찾아 실행시켜야한다.  이번에는 learning rate도 적당한 크기로 했는데도 cost함수가 발산한다면, 데이터의 크기 차이를 봐야한다. 위 그림처럼 데이터의 차이가 크다면 수렴이 안될수도 있다. 그러므로 전처리를 해주어야한다. 위 그림처럼 어느 범위에 데이터가 모이도록하는 normalize시켜야한다. 기본적으로 standardization이 있다. 이번에는 overfitting을 해결하는 방법에 대해 알아보자. 위 3가지가 있다. 3번째인 일반화시키는 것을 자세히 알아보자면 regularization의 기본 원리는 weight를 줄이는 것이다. overfitting은 그래프가 많이 구부려진것이므로 weight를 줄여 그래프를 구부리지 말고 피자는 것이다. 식으로 나타내보면 아래와 같다. 위처럼 식의 마지막 부분에 weight를 처리하면서 람다를 이용해 regularization의 중요도를 조절할 수 있다. lec 07-2: Training/Testing data set 우리가 만든 모델을 어떻게 평가할까. 기본적으로 training set 으로 공부하고 test set 으로 시험을 보는 것이다. 데이터의 양이 많으면 validation set을 가지고 알파나 람다를 튜닝하는 과정도 필요하다. 그리고 test set을 이용해 시험을 보는 것이다. validation set은 모의 고...

ML lab 06 DeepLearning

이미지
ML lec 6-1 - Softmax Regression: 기본 개념 소개 전에 배운 것을 요약하면 위와 같다. 그리고 오른쪽에 화살표로 그려진 그림을 익숙하게 해야 뉴럴 네트워크할 때 편하다.  logistic regression 을 그래프로 표현하면 위와 같이 feature을 나눌 수 있다. 하지만 이제 feature가 2개가 아닌 3개 이상이라면 어떻게 해야하는가? 간단히 생각한다면 3번 학습을 시키는 것이다. 그럼 독립된 벡터를 계산하기보다는 하나의 행렬로 3개의 y hat 값을 나타내는 벡터를 갖는 것이 더 효율적이다. 위와 같이 계산을 더 편히 할 수 있다. 여기서 사람들은 sigmoid 함수를 다 처리하는 것보다 3개를 묶어서 한번에 확률로 표현하는 softmax 함수가 더 효율적이다. 3개의 값을 softmax에 넣게 되면 도합 1이 되는 확률로 표현된다. 확률로 표현된 벡터에서 가장 큰 값을 가진 것으로 예측하게 된다. 위처럼 a일 확률이 70프로일 때 a를 1로 두고 나머지를 모두 0으로 두는 것을 one hot encoding이라고 한다. 이제 뉴럴 네트워크에는 조금 다른 cost function이 쓰인다. 바로 cross entropy라는 함수이다. 예측이 틀린다면 cost가 엄청 큰 값을 갖고 예측이 맞다면 cost가 엄청 낮은 값을 갖는다. 위처럼 에측이 정확히 맞으면 0인 cost를 갖는다. 하지만 정확히 틀리면 무한대 값을 갖는다. 그리고 위 식을 정밀하게 표현하면 아래와 같다. 테스트 셋은 건들이면 안되고 무조건 트레이닝 셋만 이용하여 위 식을 구현해야한다.

ML lab 05 DeepLearning

이미지
ML lec 5-1: Logistic Classification의 가설 함수 정의 이 강의의 목표인 딥러닝을 공부하기 전에 logistic classification이 중요한 요소이기 때문에 짚고 넘어간다. 그 전에 regression에 대해 배운 내용을 요약하자면 아래와 같다. 우선 가설을 정의한다. 그리고 나의 가설이 실제 데이터 포인트와 비교해 비용함수를 만든다. 우리의 목표는 비용함수를 최소화하는 것이다. 최소화하기 위해 gradient descent라는 알고리즘을 사용했다. regression의 메카니즘은 위와 같다. 하지만 hypothesis에는 다른 알고리즘이 있을 수 있고 cost에서도 마찬가지고 cost를 최소화하는 알고리즘도 많다. 그 중 가장 기본인 알고리즘들로 구현한 것이다. 위 그림은 두 개의 카테고리를 예측하는 binary classification의 예시를 설명한다. 그렇다면 classification 예제는 linear regression으로는 모델링은 할 수 없는 것인가? 위 그림처럼 구현은 가능하나 x축의 값이 큰 값을 가진다면 1(pass)가 아닌 더 큰 값을 갖게 되 정확한 모델링이 불가능하다. 그래서 사람들은 모든 x값에 따른 y값을 범위 0부터 1까지로 규정하고 싶어서 만든  함수가 바로 sigmoid 함수이다. 위와 같은 그래프를 나타내는 함수가 sigmoid 함수이다.  아래를 보면 알겟지만 x 값은 linear regression의 hypothesis인 H(x) = W^T*X이다. ML lec 5-2 Logistic Regression의 cost 함수 설명 linear regression과는 다른 cost 함수가 나타난다. 왜냐하면 기존의 linear regression의 cost 함수는 제곱을 하면 부드러운 2차 곡선이 됐으나 logistic regr...