머신러닝 & 딥러닝
- 3. Single-Layer Neural Network For Multi-class classification문제 - 원핫인코딩 / argmax / MNIST의 등장 2018.07.17
- 2. Single-Layer Neural Network For Binary classification문제 - sigmoid의 등장 & squarshing 2018.07.17 2
- 1. Single-Layer Neural Network For Regression문제 2018.07.13
- 2018 국제 인공지능대전 - 7. 9(월) 인공지능과 디지털 헬스케어 2018.07.09
3. Single-Layer Neural Network For Multi-class classification문제 - 원핫인코딩 / argmax / MNIST의 등장
Binary Classification문제란 y값이 0or1(False or True를 (기준조건문).astype('int')로 squarshing)로 나오는 문제였다.
이번에는 Mulit-class Classification문제로서, 가장 기초적인 예가 categorical한 상품 분류(의류 / 가전제품/ 의약품)에 대한 것이다.
먼저 그림으로 살펴보자.
위 그림과 같이,
Binary classification문제( 0 or 1) 해결을 위해 만든 Single-Layer Neural Network를 똑같이 유지한 상태(input이 x1,x2,,xn,1로 1개)에서
카테고리 수만큼 h(x), L(y,h(x)), J(w,b) = Output를 만든 뒤, 각각의 Output( 0or1 ) 가운데 가장 높은 값을 선택하면 되는데,
실제 그라디언트 디센트 알고리즘을 태울 때는,
(1) y값(정답 0 or 1 or 2)을 One-hot-encoding( np.eye(3)[y] )을 통해 [1,0,0] [0,1,0] [0,0,1]형태로 y_hot 만들어놓고
(2) y_predict_hot까지를 [ 0.4, 0.9, 0.8]형태의 확률로 예측하게 만든다.
(3) w 업데이트에 있어서는 classification용 Log씌운 Loss function인 L(y,h(x))의 편미분결과(전과 같음)의 평균을 이용하는데
이 때, y_predict -y가 아닌, 아직 롤백전인 one-hot-coding 형태[ , , ]인 ( y_predict_hot - y_hot )을 이용한다.
만약 X.T.dot()을 썼다면, .mean()대신 / X.shape[0]을 나눠준다.
(4) accuracy를 구하기 위해서, argmax(axis=1)을 이용하여 y(정답)형태로 롤백 한 y_predict 와 y를 비교한다.
(3) 거기에 정답의형태로 롤백하기 위해,
Multi-class Classification에 있어서, 불러온 데이터로 그라디언트(SL.N.N)를 태우기 전에,
전처리해줘야할 것이 있는데 y(label)을 --> identity matrix를 이용한 One-hot encoding 과정이 필요하다.
또한, one-hot-encoding된 y값을 예측한 y_predict_hot은 .argmax(axis=1)을 통해 정답형태로 롤백해줘야 accuracy를 구할 수 있다.
실습
임시요약
Multi-class classification
1) 데이터를 퍼올 땐 feature들의 데이터를 대문자 X, label 데이터를 소문자 y를 이용해 받아온다.
2) y값은 np.eye()를 통한 one-hot-encoding으로 변형시켜주어야한다. ---> y_hot
- y는 0,1,2 순으로 정답이 나와있어야 한다.
- y의 unique한 len을 알고 있어야하며, 그것을 np.eye( )[y]인자로 넣어주어야한다.
3) y_predict_hot은 [ one-hot-encoding 된 y]의 형태로 학습된 y_hot에 대해서, w와 b를 예측하므로,
y_hot 의 1개 데이터가 = [ 0, 1, 0] 이었다면 -----> y_predict_hot = [ 0.3, 0.9, 0.5 ]형태로 나온다.
4) y_predict_hot은 argmax(axis=1)을 이용하여, y형태로 롤백된다. ---> y_predict
- argmax(aixs=1)은 3개 중 가장 높은 확률의 index를 산출해주는데, 그게 자동으로 가장 근접한 y(label)형태로 반환된다.
5) 반환된 y_predict와 y를 이용해서 조건문을 이용하여 비교하면, 150개 에 대해서 0 or 1로 나올 것이다. 그것의 평균을 정확도로 한다.
6) cost function의 편미분값으로 w를 업데이트 시켜주는 Graident 를 태울 때는, 아직 one-hot-encoding형태를 사용하여 차이를 구하는데
y_predict_hot - y_hot 으로 차이를 구한다.
- w의 경우, dot product를 이용했다면 --> .mean()대신 X.shape[0]을 통해 데이터의 개수로 나누어서 평균을 적용시킨다
- b의 경우, mean(axis=0)을 통해 150개 데이터에 대한 세로줄의 평균을 구해서 업데이트 한다.
7) y_predict 식의 검증이 끝났다면, 기존 데이터에 새로운 칼럼으로 추가해준다.
my) y는 np.eye( 라벨의 갯수) 로 원핫인코딩 ---> y_predict는 y_predict_hot에다가 argmax(axis=1)로 롤백
실습 - MNIST
어떤 문제를 Single-Layer Neural Network로 풀기로 마음 먹었다면,
X(feature)와 y(label) 데이터를 가져온 뒤,
그림을 그려봐야한다.!!!
-> MNIST( multi-classification)을 Single-Layer N.N. 버전으로 풀기 복습 완료(로컬 노트북)
'머신러닝 & 딥러닝 > 딥러닝 - Image classification' 카테고리의 다른 글
2. Single-Layer Neural Network For Binary classification문제 - sigmoid의 등장 & squarshing
저번시간에 언급한 Single-Layer Neura Network에 대한 기본 알고리즘인 Gradient Descent를 공부했다.
전체적으로 Single-Layer Neura Network와 Perceptron과 같은 개념으로 보고, 아래와 같이 그림으로 나타낼 수 있다.
게다가 고전 알고리즘인 Linear Regression도 비슷한 개념으로 생각하자.
이러한 SLNN는 사실 Regression문제을 위한 Single-Layer Neural Network다.
그러면 Regression문제 이외에 다른 문제가 있을 까?
Regression문제 과 classification문제
기본적으로, 주어진 Data를 보고 Regression문제인지 Classification문제인지를 먼저 정의해야한다.
위 표를 참고하여, 우리가 받은 Data의 label이 높고 낮음이 중요-> Regression문제
위 표를 참고하여, 우리가 받은 Data의 label이 같냐 다르냐가 중요-> Classification문제
전통적인 알고리즘인 리니어, 로지스틱 회귀와 관련해서는
Regression알고리즘을 ---> Regression문제에 적용하여 푼 것 : Linear Regression
Regression알고리즘을 ---> Classification문제에 적용하여 푼 것 : Rogistic Regression
Binary Classification문제
Binary Classification문제는 y값의 범위가 0 or 1이다.
그러나 저번시간에 배운 Regression알고리즘(SLNN-gradient descent)의 h(x)(y_predict)값이
-무한대 ~ +무한대까지 나오므로 binary classification문제에 적용을 할 수 없다.
그러므로, 저번시간의 Regression알고리즘인 SLNN-gradient descent을 ---(???)-----> classification알고리즘으로 바꿔주어야한다.
- Regression알고리즘에서는 h(x)의 값으로 -무한대 ~ +무한대까지 나왔다.
이제 중간에, 이 값(-무한대~+무한대)를 받아서 ---> 예측값(h(x), y_predict)값이 0 or 1이 나오도록 으깨주는 새로운 함수 f(x)를 집어넣는다.
이러한 f(x)를 squarsh function이라고 하며, y값(h(x), y_predict)가 0or1으로 정의되므로
binary classification문제를 풀 수 있는 classification알고리즘이 된다. - 이 Squarsh function로 0 or 1이 나오도록 으깨어서 Regression - SLNN알고리즘에 적용시 ----> classification알고리즘이 된다.
하지만, 이 Squarsh function은 반드시 미분가능해야한다. ->
그래야 f(x)로부터 정의되는 h(x), L(y,h(x)), J(w,b) 편미분하여 -> w를 업데이트 해 줄 수 있다.
그러므로 Squarsh function의 전제조건은 - 이 전제조건(미분가능하고 0or1이 나오는)을 만족하는 Squarsh function이 바로 f(x) = Sigmoid이다.
def sigmoid(x):
return 1 / ( 1 + np.exp(-x) )
식은 아래와 같고, https://www.desmos.com/calculator 에서 그려면 그래프는 아래와 같다.
x가 무엇이 들어오든 0과 1사이로 Squarsh한다.
soomth하므로, 미분이 가능하니 --> h(x), L(y, h(x)), J(w,b)모두 미분가능하다.
여기까지 요약해보면,
저번시간에는
Regression문제(h(x), y예측값이 -무한대+무한대)를 푸는 Single-Layer Neural Network가
저번시간에 학습한 Gradient Descent이다.
이번에는
Classification문제(h(x), y예측값이 0or1) 를 푸는 Single-Layer Neural Network를 짜기위해서
Gradient Descent 알고리즘 중 h(x)값이 0or1이 나오도록 미분가능한 sigmoid를 h(x)전에 f(x)로 씌워준 시킨 뒤, 합성해주었다. h( f(x) )
하지만 여기까지만 하면 문제가 발생한다.
- sigmoid를 입힌 Loss function은 그래프상으로 울퉁불퉁해져서, 접선의 기울기가 0이지만 happy하지 않는 또다른 지점(Local obtimer)이 생겨, 정답(y_predict - y = 0)이 아님에도 불구하고 w를 업데이트 안시켜주는 현상이 생길 수 있다.
이렇게 울퉁불퉁한 h(x)를 graident로 태우면, L(y,h(x))는 느리거나 수렴하지 않을 수 있다. - sigmoid에 있는 e^x 때문에 결국에는 울퉁불퉁해진다. 이 울퉁불퉁한 것을 없애서 happ한 Loss function을 만들어주기 위해
sigmoid에 Log를 입혀 e^x를 없애 울퉁불퉁함을 없애준다.
그렇다면, sigmoid가 들어감에도 불구하고 Loss가 soomth해지기 위해 Log가 들어가야하므로
Log가 들어가는 새로운 Log function을 정의해보자.
즉, Binary Classification문제(0or1)을 풀기위한 Single-Layer Neural Network 알고리즘으로서
기존의 Graident Descent에서 sigmoid를 입힌 h(x)를 정의하고, 울퉁불퉁한 부분을 위해 Log를 입힌 Loss function
그게 Cross-Entropy 이다. - Cross-entropy의 경우에도, 역시 Loss function은 0일 때, happy / 무한대일때, unhappy하다.
증명은 아래 그림을 참고하자.
여기까지 요약하자면,
classification문제에서도 사용할 수 있는 Gradient Descent(SLNN)알고리즘을 만들기위해
1. y값이 0or1이 나오도록 squarsh function인 sigmoid를 입히고
2. 울퉁불퉁하여 미분이 되지않는 것을 방지하기 위해 Log를 입힌 Loss function이 cross-entropy이다.
이렇게 만든 Loss function은 Graident를 태울 수 있다.
우리가 실제로 쓰는 함수는 Loss function이 아니라 cost function이다.
cross-entropy(모든loss function)에서 0 or 무한대가 나오는 것을 증명을 통해 확인할 수 있는데,
만약 우리의 데이터 중에 하나라도 unhappy한 데이터로 인해 무한대가 나온다면,
전체 데이터에 대한 loss function인 cost function이 무한대가 나올 것이다.
그렇게 된다면 너무 불합리한 알고리즘이 될 수 있다.
실제 코드에서 cross-entropy를 사용할 때는,
예측값y_predict에서는 0 or 1이 나오는 것이 아니라 확률로 나온다.
그리고 그 확률을 0.5이하시 -> 0으로, 0.5 초과시 -> 1으로 분류해버릴 것이다. 이러한 것을 클리핑or쓰레숄더라고 하는데,
이렇게 한다면, Loss function에서는 y가 0or1만 가지게 될 것이므로, 무한대의 문제가 안생긴다.
- 실제로 Graident Descent를 돌리기 위한 w를 업데이트 하기 위해서는 cost function 편미분( 결국에는 loss function편미분)을 한 것이 필요하다.
- 그 과정에서는 Loss function의 편미분을 구한다.
- 그 과정에서는 h(x) = sigmoid( z(x) )의 미분이 들어간다 * sigmoid 미분 = sigmoid( 1 - sigmoid )
- Binary Classification문제를 풀기위해만든 SLNN의 알고리즘의 loss function인 Cross-entropy의 편미분 결과는
Regression문제를 풀기위한 SLNN의 알고리즘(Gradient Descent)의 loss function의 편미분 결과와 동일하고 코드도 같다.
실습
'머신러닝 & 딥러닝 > 딥러닝 - Image classification' 카테고리의 다른 글
1. Single-Layer Neural Network For Regression문제
이론
머신러닝이란?
- 우리가 쓰기위해 만든 보편적인 알고리즘
- 한국어로는 기계학습이라한다. 영어에 익숙해야져야한다. 그래야 자료를 많이 볼 수 있따.
- 머신러닝은 크게 3가지로 갈린다.
- Supervised learning(지도학습)
- label(암인지 아닌지)를 맞추는데 도움을 주는 것을 feature(성별, 나이, 혹은 픽셀)라 한다.
- x(feature) 과 y(label)이 있다. 즉, 맞추어야하는 정답에 해당하는 y값(label)이 있으면 supervised learning으로 풀어야한다.
맞추어야하는 정답에 해당하는 y값(label)이 없다면 unsupervised learning으로 풀어야한다.
- 현장(일상생활)에서는, unsupervised learning이 많이 쓰일 것이다.
왜냐하면, supervised learning은 하나의 feature당 하나의 label이 딱딱 있어야한다.
하지만, cctv/블랙박스의 많은 사진들 중 각각의 사진마다 하나의 사람을 태깅할 수 없기 때문이다. 즉, x와 y가 정확히 태깅되어있는 데이터를 쉽게얻을 수 없기 때문이다. 반면에 unsupervised learning은 각각의 feature에 해당하는 label이 있어야하는 것이 아니기 때문에, 상대적으로 알고리즘을 적용하기 쉽다.
- 그러나 실제(현장)로는 supervised learning이 많이 쓰인다. 연구하기도 쉽고 성과가 잘나오기 때문이다.
즉, 일상생활에서는 unsupervised learning이 많아야하지만, 연구와 실제(현장)는 supervised learning가 많이 쓰이고 있다|
하지만 요즘 연구의 추세는 unsupervised learning에 대한 연구를 많이 시도하고 있다.
- 간단히 말하자면, y값이 있으면 supervised / 없으면 unsupervised다.
연구를 위해서 말해보자면, y값(supervised)이 있어서 잘했는지 못했는지 가이드를 해주는 컨셉이 supervised이고,
y값이 없는데도 스스로 가이드해서 학습이 가능한 것은 unsupervised다. 1. Supervised learning(지도학습)의 분류
- Tree 모델(Decision Tree)
- Regression 모델 : 이게 딥러닝의 main
- Linear Regression
- Logistic Regression
- support vector motion
- Artficial Neural Network(ANN, 인공 신경 망)
- CNN
- RNN
2. Unsupervised learning(비지도학습)
- x(feature)만 있고 y(label)는 없다.
- x와 y가 정확하게 맞추어져있는 태깅되어있는 반드시 없어도 되므로 적용하기 쉬우나.. 연구에 있어서는 supervised가 많음
y가 많으므로. 그러나 지금은 un~으로 가는 중 왜냐하면
- 가이드가 지도해줄 y값이 없는데도 불구하고 스스로 아이가 학습하는 것. 아이가 중력/가속도를 스스로 알아낸다.3. Reinforcement learning(강화학습) :
- 알파고가 아니면 다룰 일이 없다. 앞으로 응용할 때도 없음. 응용할 곳이 별로 없다.
딥러닝?
- 마케팅적인 요소가 적혀있다. 그래서 연구쪽에서는 인공신경망이라고 말한다.
- - 딥러닝이란? 머신러닝 알고리즘(3) 중 Supervised learning 중 Regression모델 을 먼저 알아보자.
1) Linear Regression 모델- y값이 -무한대 ~ +무한대의 범위를 가지는 Regression문제를 푸는 알고리즘,
2) Logistic Regression 모델 - y값이 0 or 1이 나오는 Classification문제를 푸는 알고리즘,
- 1)과 2)는 전통적인 Regression모델이다. 이제 3)부터는 요즘시대에 말하는 딥러닝 알고리즘을 담고 있는 Regression모델
3) Atficial Neural Network(A. N. N) - 사람 뇌의 Neural Network를 모방한 컴퓨터의 알고리즘 모델
- A.N.N.은 가장 처음 나온 Single-Layer N.N. -> Multi-Layer N.N. -> Convolutional N.N. -> ... 로 발전하였다.
- A.N.N. 을 사용하여 Regression 문제와 Classification 문제를 푸는 것이 목표이며
A.N.N. 중 hidden-Layer가 3개이상 들어간 Multi-Layer N.N. 로 Regression/Classification문제를 푸는 것을 딥러닝이라 한다.
1) y값이 -무한대 ~ +무한대의 범위를 가지는 Regression문제
2) y값이 0 or 1이 나오는 Classification문제 - - 이번시간에는 하나인 Artificial Neural network 중 가장 간단한 Single-Layer Neural Network를 먼저 공부해보자.
Artficial Neural Network
이번시간엔 A. N. N. 중 가장 간단한 Single-Layer Neural Network를 배울 것이다.
- 딥러닝, 알고리즘의 특성을 나타낼 수 있는 가상의 가장 심플한 dataset을 만드는 것이 중요하다.
ANN의 dataset은 Supervised Learning으로서 기본적으로 feature와 label이 기본적으로 필요하다
- ANN은 Supervised Learning으로서 feature와 label이 있다고 했다.
- 실습은 1) Single Layer Neural Network에 관련된 RandomSearch / h-step Search / Gradient Descent 모델을 학습할 것이다.
실습 - 생략
이론2 - Gradient Descent 자세히 알아보기
머신러닝 3가지 중에 Supervised Learning은 x들과 더불어 y(답)이 있는 학습방법이다.
그 중 Regression 모델인 ANN, RNN, CNN, 선형회귀, 로지스틱회귀 등이 있지만, 그 중 ANN을 다루고 있다.
- Artficial Neural Network
- Single-Layer Neural Network
- Multi-Layer Neural Network
- Convolutional Nerual Network
Single-Layer Neural Network와 perceptron은 동일한 개념이라고 생각하자.
- y(답)과 x(feature들) 있는 어떠한 데이터가 주어졌다고 가정하자. (x는 여러개 일 수 있지만 하나라고 가정)
이러한 데이터는 Supervised learning을 적용할 수 있고, 그 중에 Regression 모델을 쓴다고 했을 때,
A.N.N 중 가장 간단한 S.L.N.N.로 Regression문제를 풀 때는, feature에서 -> label예측값을 도출해내는 weight와 bias를 구해야한다.
이러한 과정을 Optimalization이라고 한다.
이러한 최적화 기법에는 여러가지 방식(Random Search, h-step Search, Gradient Descent)이 있지만,
그 가운데 가장 효율적으로, A.N.N.을 학습시켜 weight와 bias를 구하는 알고리즘이 Gradient Descent이다..
- 기본적으로 앞으로 학습하는 모든 A.N.N.은 이 Gradient Descent를 사용해서 학습시킬 것이다.
- Gradient의 핵심은 loss, cost function을 편미분하여 w와 b의 업데이트량을 구할 수 있는 알고리즘이다.
- 제대로 학습되었다면 좋은w(배점, weight)와 b(bias)를 찾아내서 -> 다음data에 대한 y를 예측할 수 있다. 이러한 S.L.N.N.로서 문제를 풀 때, w와 b를 잘 찾아냈는지를 나타내는 함수가 Loss function이다. - 즉, 답을 알고 있는 data를 보고서, w와b를 예측하여, 다음의 답을 예측할 때
Single-Layer Neural Network를 사용해서 풀고자 한다면, - 가장 먼저해야할 것은 Hypothesis function -> Loss function -> Cost function을 정의하는 것이다.
- 다음은 Cost function을 w에 대해 편미분하여 -> 더 나은 w(점프거리)를 대략적으로 알아서 업데이트 시켜주는 것이다.
- 결과적으로는 Loss function만 편미분 해주면, 알아서 나온다. - 마지막으로 epoch-loop 수와 learning_rate를 통해 좀더 정확하게 w를 업데이트 해준다.
- Loss function(y, h(x)) -( w에 대한 2차함수) 을 편미분하여
Gradient Descent 알고리즘 속에서 갱신해줘야할 w의 방향성과 양을 대략적으로 알 수 있다고 했는데
그림으로 표현해보면 아래와 같다.
- L(y,h(x))를 편미분한 것이 w의 점프거리 갱신량과 대략적으로 비슷하다
- 그래프상 접선의 기울기가 0이라면, 갱신할 것도 없이 w와 거의 같다. 기울기가 가파르다면 갱신량이 많은 안좋은 경우다..
- 정확한 w의 갱신량은 epoch을 통한 loop와 learning_rate가 결정해 줄 것이다.
Loss function에 대해 정리하자면
Regression문제를 - S.L.N.N.로 이용해서 풀 때,
정의한 Loss function( L(y,h(x) = 1/2 ( h(x)-y)^2 )는 0이면 error가 0이라서 좋고, 무한대로 나오면 error가 큰 안좋은 경우다
그러므로 w를 계속 업데이트 시켜서 h(x)-y = 0이 나오도록 만들어야 하는데,
Loss function의 편미분한 값은 w를 찾아가는 점프거리를 반복해서 갱신해주는 방향성과 양(w변화량)을 의미한다.
그래프상으로 접선의 기울기이다.
참고) Regression문제에 쓰이는 Loss function을 MSE(mean square error) = 1/2 ( y_predict - y)^2 이라 한다.
앞으로나올 classification문제에 쓰이는 Loss functiond을 Cross-entropy라 = -y*log(h(x)) - (1-y)log(1-h(x)) 한다. - Cost function은 결국에는 Loss function을 미분하면 되지만, 증명해보자.
- 결과적으로 코드상의 매칭은
h(x) = wx+b ---> y_predict
L(y,h(x))의 편미분 ---> w 의 변화량(점프거리 갱신)의 대략적인 것
J(w,b)의 편미분 ---> w의 변화량(learning_rate = 람다 제외)
그리고 y_predict(예측값)에 해당하는 함수가 hypothesis function이다
Loss function이 하나의 데이터에 관한 얘기라면, Cost function은 전체 데이터에 관한 Loss function이다
실제 데이터를 S.L.N.N.로 분석해보기
어떠한 데이터를 보고서, label 칼럼에 대한 label(predict) 칼럼을 생성할 것이다.
예를 들어, 보스턴 집값에 대한 데이터를 가지고, 집값을 예측하는 알고리즘을 Gradien Desecent(Single-Layer Neural Network)로 만들어서 예측하자.
- numpy와 pandas 패키지를 import한다.
- Dataset을 데이터프레임으로 만든다.
- 데이터 중에 칼럼명만 나열된 칼럼이 있다면, 가져와서 columns인자로 같이 DataFrame으로 만든다.
- 데이터 중 target인 label데이터가 따로 있다면, label만 받아와서 DataFrame의 칼럼으로 추가해준다.
- 만든 데이터는 shape와 head()를 확인한다. - Gradient Descent 기본 코드를 가져와 적용해보자.
- 데이터의 각 feature에 해당하는 칼럼들을 x1, x2로 받자. 각 데이터 수만큼 리스트로 들어갈 것이다.
- for문에 들어가기 전에,
num_epoch과 learning_rate는 기본적으로 시작
w는 feature수만큼 랜덤균등분포로 -1.0 ~ 1.0으로 생성
b는 1개만 랜덤균등분포로 -1.0 ~ 1.0으로 하나 생성
- for문 안에서는 돌면서 더 해피한 값으로 갱신들어야 할 것인
y_predict 계산식이 있다. feature수만큼 수정해준다.
error(예측값- 정답에 절대값씌운 평균)식은 그대로다.
if error < 기준error값: break의 기준error값도 수정해준다.
*기준error값은 해당 데이터의 y(label)을 기준으로 생각해준다.
*만약, 집값 예측이라면, error기준이 5로 주어도, 5000달러(500만원)으로서 에러범위로서는 충분하다.
if epoch 갯수별 print는 0 : 해당epoch과 1: error 수치만 띄워주도록한다.
w값과 b 갱신식을 만들어준다. feature수에 맞게만 만들어주면 된다. - 만일 epoch 100, learning_rate 100으로 시작했는데, error가 줄지않고 늘면서 발산한다면,
- 가장 만만한 것은 learning_rate를 줄여주는 것이다.
*너무 줄이면, w가 없데이트가 안됨->y예측값 그대로->error도 그대로-> 발산 그대로-> 올려줘야함. 다른 것을 수정하더라도 error가 멈쳐있으면 learning_rate를 올려줘야함.
- 1.0 -> 0.1 -> 0.01 -> ...-> 0.00001 식으로 나누기10씩 소수점을 넣어준다.
- 0을 늘려줬는데, 발산하면 다시 0을 줄인다.
- 그다음 마지막 자리수를 1->2->3으로 늘여준다.
- 그다음 epoch을 10000, 100000 씩으로 늘여준다.
- epoch만큼 print 단위와, 자리수배열을 예쁘게 만들어준다.
* 딥러닝은 data에 따라 configuration(hyper-parameter)이 천차만별로 바뀌기때문에 tensorflow코드만 가져온다고해서 실행이 되지않는다. 그러므로 이론을 자세히 공부한 상태에서 응용이 가능하다. - 이제 원하는 기준error수준으로 label이 예측가능해지면, 결과값을 뽑아낸다.
- y_predict식을 가져와서 예측값을 데이터수만큼 확인해본다.
- dataFrame을 .copy()해서 result라는 새로운df에 옮겨담는다.
- y_predict를 데이터의 label예측 칼럼(predict)으로 추가해준다.
Single-Layer Neural Network도 실전에 이용할 수 있다.
real데이터에서도 어느정도 성능이 보장된다.
dot product
지금은 13개의 feature밖에 안되지만, 만약 feature가 300개가 넘어가면 y_predict 식을 작성하기가 쉽지가 않다. 그 때 쓰는 것이 dot product이다.
위의 그림를 보면, y_predict 계산식에서 가로는 x, 세로는 w가 될 것이다.
- feature의 수만큼 생성했던 w를, 한번에 생성해도 된다.(size=13인자)
- X에서는 feature들만 모아놓았기 때문에, y_predict = X(506 ,13).dot(w(13,1))+b 로 한번에 계산된다.
- w를 업데이트해줄 때, 기존은 w = w - learning_rate * ( (y_predict - y)*x).mean()
- feature 데이터만 모아놓은 X에 dot()을 적용하여, 순서대로 앞의 y_predict-y와 곱해져야한다.
- X(506, 13)를 X.T로서 (13, 506)로 바꾸고,
- y_predict - y(506, 1)을 dot하여 (13, 506)dot(506,1) -> (13,1)의 w데이터가 각각 업데이트 될 것이다.
- 이제 .mean()의 개념을 도입하기 위해서, for문전에 num_data = X.shape[0]을 통해 X의 (506, 13)중 데이터의 수를 의미하는 506을 가져와서 나눠준다. - 만약, 공식상에서 나온 행렬의 곱에 dot product를 적용시킬 때, shape가 맞지 않아서 계산이 안된다면,
1) 뒤에놈을 .T로 변형시키고
2) 그놈을 앞으로 빼서 .T.dot( ) 해주면 된다.
예를 들어, X(506데이터, 13feature수) * w(feature수13, output수 1)는 바로 X.dot(w)로 적용이 되지만
w의 업데이트량을 의미하는 y_predict - y ( 506, 1 ) * X(506, 13) 의 계산에서는
1) X.T(13, 506) -- y_predict-y(506, 1) 로 뒤에것을 T.로 뒤집고
2) X.T.dot( y_predict -y ) 로 앞으로 빼서 dot을 적용시킨다.
'머신러닝 & 딥러닝 > 딥러닝 - Image classification' 카테고리의 다른 글
2018 국제 인공지능대전 - 7. 9(월) 인공지능과 디지털 헬스케어
데이터분석 공부나 한의학 임상에 대해 더 배우고 싶어서 서울에 올라온지 얼마 안되서
큰 컨퍼런스가 열리는 것을 확인하고 참석을 위해 사전등록을 했다.
첫날은 인공지능과 디지털 헬스케어에 대한 전체적인 컨퍼런스이고
둘째 날 부터는 워크샵들이 관심이 갔다.
먼저, 강연 듣기전 각 세션에서 업체들 이 소개하는 부스를 살펴보았는데,
- 딥러닝을 통해, 사람들과 가위바위보 하는 팀
- 손으로 드론을 제어하는 팀 (가장 흥미..진진)
- VR체험
각종 인사들의 축사 뒤에, 본격적인 첫날 강의가 이루어졌다.
14:10 ~ 14:30 서울아산병원, 김남국 교수
애니악이라는 컴퓨터 계산기에 네트워크가 붙으면서 정보처리기가 되었다.
거기에 CONNECTIVITY가 붙어서 자동화기기가 되었다.
그 과정에서 보안 등이 문제가 되면서 블록체인이 수면위로 떠올랐다.
헬스케어와 관련된 빅데이터는 항상 논란이 되었다.
CLINICAL DATA는 전체 데이터중 10%
더 나아가 GENOMIC EVULOTION에 의해 GENOMICS DATA는 30% 정도가 된다.
데이터도 의료환경도 개발되고 있다. 이런데에 있어서는 효율적인 R&D가 중요하다.
- IoT 체온계 -> kinsa라는 미국 스타트업에서 3주간의 데이터를 분석하여 influenza 예측이 가능하다
- Google Trends -> 마찬가지로 3주간의 데이터를 가지고 influenza 예측이 가능하다
- 새로운 정보에 대해서는 조심스러운 접근이 필요하다
IBM의 opportuniy를 보면
- 8 trillion exam 중에 2trillion 은 wastes in healthcare industry 이다.
우리나라도 Vuno - Bone aging - > 비보험수가로서 인허가가 나서 수익을 가질 수 있는 정도이다.
AI+Hearthcare의 CAGR : 연간42% 성장률을 보인다.
Digital Hospital
- 의사의 일만 줄인것 이 아니라 응급의료 파견 서비스 등을 통해 암환자 입원역략 60%증가, 응급시 ㄹ대기자 25%감소 수술대기자 25:감소
EMR + IoT -> 의사(대부분은 간호사)의 일이 감소한다.
- 종이차트 -> 사무실에서 EHR에 일일이 수치 입력하던 것에서
- 데이터를 환자의 손목밴드에서 자동업로드 등의 방법
- 아이들의 wareless band를 발목에 착용하여 체온상승 관찰
Patient Empowerment 관점에서
- 환자들이 똑똑해짐. 환자를 능동적인 객체로 끌여들여 진찰할 필요가 있다.
- IoT, 블록체인 등을 relocation하자
구글은 2008년 의료데이터를 모으려했으나 실패
- 병원에서 환자에게 주는 benefit / 동기가 부족
- 환자는 정보관리의 능력이 없음.
우리나라의 Mediblock은 시도를 했으나,,
- 결국은 데이터를 모아야하는데 기술력 부족
- regid한 데이터이므로 암호를 잃어버리면 아무도 acess 불가
딥러닝
- 데이터 + 정답을 주면 expert 프로그래머가 멋지게 짜던 것에서
이제는 딥러닝을 통해 컴퓨터가 프로그램을 짜고 예측한다.
- Better decision에서는 IBM의 왓슨이 가능하다.
- 챗봇을 통해 쉽게 의료지식을 물어볼 수 있다.
그러나 지금은 Medical Imaging에서 가장 포텐션이 크다.
- 지금은 보통 의사보다는 잘하지만, 아주 expert한 의사보다는 떨어지는 수준
DeepRadiology.com -> block chain power
AI apps Platform -> Philips, Siemen etc
병원입장에서 보면?
- 고사양 장비, 의사의 개입 등 많은 문제가 있다.
- 막상 현장에서 쓰고 있는 것은 거의 없다.
- 인간이 잘 못하는, 의사들의 잡일(응급판독, 수술후 제대로 되었는지 절단 여부)에 대해 인공지능이 하면 좀 더 잘할 것 같다.
- 인공지능(cnn)이 미리 판독하고, 의사가 판단하는... 수가가 없더라도 더 많은 진료를 할 수 있어 수가가 높아진다.
- Surgical Imaging field -> CT 등을 인공지능이 알아서 자르고 판독함
- Surgery Video -> 신경 접근 등에 대한 경고를 해준다던지... 이러한 기술
- 대장내시경도 왠만한 의사보다는 잘하지만, expert 보다는 잘 못하는
- Spine surgert에서 의사는 Two port endoscopy로 양손 중 한손으로 엔도스코피를 보고 있는데, 인공지능이 그 한손을 대체 해 준다면 혁신이 될 것이다.
다양한 Issue가 있다. 법적..윤리적.. 등
- FDA는 시범사업이 거의 끝나간다.
- FDA는 안저소견에 있어서, 의사를 도와주는 컨셉에서 -> 의사대신이 인공지능이 판단하는 식으로의 인허가가 제공되고 있다.
3분 진료 (환자의 설명부족)-> 15분 진료(의사의 효율부족)
- 3분 진료에 있어서, 환자에게 충분히 설명시켜줄 인공지능을 이용하는 방향으로 가야한다.
세션1.
정보통신 산업진흥원, 이준영팀장 - 4차 산업혁명 시대 정밀의료의 미래
- 우리가 원하는 의료서비스는? 의료질 향상과 의료비 감소
현 의료서비스의 아쉬움
- 보편적 의료의 한계
- 오진율 증가(암 오진률 61%)
- 의료서비스 질 저하
- 의료비 증가
해결책
-궁극적으로는 ICT(정보통신)이다.
-국내 병원 및 기업의대응
- 수도권 대형병원 중심으로 자체 유전체 연구소 개설 및 병원-기업간 공동연구 진행 중
- 삼성SDS- 삼성아산병원 - 기업-병원간 협력
- IBM 왓슨 국내 병원 도입 현황
- 가천대 길병원, 부산대병원, 대구대, 계명대, 건양대, 조선대, 화순전남대병원 도입
> 한국 만의 암환자의 유전특성에 대한 기술이 필요하다.
우리의 현실
- 최고의 ICT역량 보유(HIS : 병원의 병원정보시스템 / PACS : 영상정보관리 시스템)
Iot + 의료 -> IoMT 개발 -> 정밀의료 네트웤 기반은 갖춘 상태다.
AI는 의료에 적합한 기술인가?
한국형 정밀 의료 서비스 : 닥터.앤서 : AI의사
- 빅5 포함 25개 병원 + ICT기업 19개 기업 참여 , 3년간 357억
의료정보를 활용한 클라우드 기반 정밀의료 병원정보시스템 사업시간(17~19년)
뷰노.. 첫 식약청 허가.. 그러나 AI개발자의 고민도 많다.
서울아산병원 닥터.앤서 프로젝트 담당의 김영학 교수
K-DASH : AI기반 정밀의료 솔루션 추진단
25병원 + 19기업 = 병원기업 협력
한국형 정밀의료 서비스 -> 닥터앤서의 목표
- 심혈관(심뇌혈관질환, 심장질환), 뇌(치매, 뇌전증, 소아희귀난치성 유전질환), 암(유방암, 대장암, 전립선암)을 중점으로 8개 중점질환 정밀의료 서비스개발
- 모델링을 통한 환자질환 예측개발
현황
- 21개의 SW이 목표
- 3년간 357억 투입 예정
- 올해와 내년에 3개의 SW에 대해 직접 서비스 예정
- 대장암은 우리나라의 데이터가 가장 많다.
- 세포진단을 통해 치매진단
- 뇌전증(간질) 질환
- 소아희귀난치성 유전질환은 유전체 데이터를 활용하는 것이 특징
- 일찍이 없었던 협력.. 프로젝트..
- 현재는 2개월 차.. 내년에는 소프트웨어로 구현시범
- 최초 클라우드 활용(안전, 효율적으로 여러병원이 참여)
- SW기업은 총 17개 기업 ( 중견기업+스타트 기업)
- 카카오 브레인과 클라우드 구축
참여기업 예, VUNO
삼성SDS 조일영, 이민영 수석
P-HIS : 정밀의료 병원정보시스템
클라우드 기반 병원정보시스템 (CLOUD-EHR)에 대한 시각
- 기회 : 고품질 서비스, 초기 투자비용 절감, 강력한 보안
- 도전 : 표준기능의 활용, 병원별 독립성 보장, 데이터의 활용성
데이터의 표준화, 구조화
- 수기 서식-> 서식생성기 -> 서식 생성을 통해 표준화
이상... 2쨋날 워크샵은 총무가 허락해주는 데로 결제해서 들어봐야지