목록MACHINE LEARNING (14)
Dev log
이제 3년차 머신러닝 개발자로 들어서고 있는 시점에 나는 내가 가지고 있는 역량이나 방향이 제대로 가고 있는지에 대해 또는 무엇을 더 공부해야 되는지에 대해 의문을 가졌다. 로드맵은 언제든 바뀔 수 있으므로 최신버전을 보고 싶다면 링크를 타고 확인하기를 바란다. 또한 공지에도 적어놨지만 모든 블로그의 글은 내 깃블로그에 먼저 업로드 되므로 티스토리보다 더 빠르게 글을 확인하고 싶다면 깃블로그를 참고하기를 바란다. Introduction Fundamentals Data Science Roadmap Machine Learning Roadmap Deep Learning Roadmap Data Engineer Roadmap Big Data Engineer Roadmap 정답이라는 보장은 못하지만 그래도 방향 잡..
간단하게 텐서플로우와 파이썬 문법 비교 해보겠습니다. Python ? Tensorflow 우선 간단하게 1에서 5까지의 숫자를 출력해보도록 하겠습니다. x = 0 for i in range(5): x = x+1 print(x) 파이썬으로 하면 위와 같으며, Tensorflow로 하면 아래와 같습니다. x = tf.Variable(0, name='x') model = tf.global_variables_initializer() with tf.Session() as sess: for i in range(5): sess.run(model) x = x + 1 print(sess.run(x)) 아무래도 간단하게 출력하고 확인할 수 있는건 Python만한게 없네요. 이번에는 Numpy문법을 Tensor로 구현해보도..
언어를 새로 배우거나 무언가를 새로 배울 때, 우리는 가장 먼저 Hello, world! 를 가장 먼저 찍어냅니다. Tensorflow 을 포스팅 하는 기념으로 Hello, Tensorflow!를 찍어보겠습니다. Tensorflow 기본 구조 우선 텐서플로우가 설치가 안되어 있다면 아래와 같이 설치 해주세요. pip install tensorflow 설치가 되었다면 모듈을 가져와서 tf를 호출합니다. import tensorflow as tf 그리고 그래프를 실행할 세션을 구성합니다. (참고로 포스팅에서 사용하는 tf는 1.x 버전입니다.) sess=tf.Session() # 그래프를 실행할 세션을 구성한다. hello=tf.constant('Hello, Tensorflow') # # # # # # # ..
머신러닝 개발자들이 많이 사용하는 Tensorflow에 대해서 간단하게 알아보겠습니다. 요즘에는 텐서플로우외에도 케라스나 파이토치등 다양하지만 저는 아직 텐서플로우가 편해서 텐서플로우를 쓰고 있습니다. 맨 처음 머신러닝을 접할 때, 텐서플로우로 접했기 때문인거 같습니다. 같이 공부했던 사람들 중 케라스나 파이토치로 시작한 사람들이 꽤 있었는데 케라스나 파이토치로 시작한 사람들은 텐서플로우가 조금 더 어렵다고 하더라구요. 그래서 커뮤니티 사이에서 가끔 텐서플로우로 먼저 시작하라는 글이 보이기도 하더라구요. 이 글 쓴 시점에서는 현재 텐서플로우는 2.0이 나와 있는 상황입니다. 2.0버전이랑 1.x 버전이랑은 문법 차이가 꽤 나기도 하고, 성능 차이도 있다고 합니다. 지금은 1.x 버전에 관하여 포스팅 하고..
오버피팅을 억제하기 위한 방법으로 Dropout에 대해 알아보도록 하겠습니다. 오버피팅은 학습을 시키면서 흔히 접할 수 있는 문제이며, 풀어야 할 문제 중 하나 입니다. 오늘은 이러한 오버피팅에 대한 문제를 바로 잡을 수 있는 방법 중 가장 간단한 방법에 대해 알아보겠습니다. Dropout Dropout은 오버피팅을 억제하기 위해 뉴런을 임의로 삭제하면서 학습하는 방법입니다. 신경망 전체를 학습시키지 않고 일부 노드만 무작위로 골라 학습 시키는 방법입니다. 학습하는 중간중간 일정 비율로 노드들을 무작위로 골라 출력을 0으로 만들어 신경망의 출력을 계산하는 방법입니다. Dropout을 적용하면 학습되는 노드와 가중치들이 매번 달라지기 때문에 신경망이 과적합에 빠지는 것을 예방할 수 있습니다. Dropout..
머신러닝에서 Batch Nomalization을 이용하여 학습을 실제로 할때, 주의 할 점과 가중치 초기화의 중요성에 대해 같이 보도록 하겠습니다. 가중치 초기화의 중요성 가중치 초기값을 적절하게 설정하면 각 층의 활성화 값의 분포가 적당히 퍼지는 효과가 발생합니다. 그리고 활성화 값이 적절하게 분포하게 되면 학습이 잘되고 정확도가 높아집니다. 위 그림을 보면 한 눈에 봐도 고르게 잘 된것을 알 수 있습니다. 가중치 초기값 선정하는 5가지 방법 가중치 초기값을 선정하는 방법에는 대략 5가지 정도가 있습니다. 1. 가중치 초기값을 0으로 선정 이 방법은 추천하지 않습니다. 왜냐하면 학습이 잘되지 않기 때문이죠. 하지만 이런 방법도 예전에 있는 있었다. 로 넘어가시면 될 것 같습니다. 2. 표준편차가 1인 ..
저번 포스팅에서는 forward와 backward 그리고 활성화 함수인 Relu함수를 클래스로 구현해보았습니다. 이번에는 cross entropy와 softmax도 함께 구현해보도록 하겠습니다. cross entropy와 softmax 신경망에서 분류할 때, 자주 사용하는 활성화 함수는 softmax 함수입니다. softmax 함수는 신경망 마지막 층에서 사용합니다. softmax에 관한 자세한 설명은 저번 포스팅인 여기를 확인해주세요. softmax와 함께 오차 함수로 cross entropy 함수를 사용하는데, cross entropy error는 줄여서 CEE라고 쓸 수 있습니다. $$ E\quad =- \sum_{ k }{ { t }_{ k } }{ log\, y }_{ k }$$ $y_k$는 신..
저번 포스팅 때, 순전파와 역전파 원리를 간단하게 보고, class를 만들어봤습니다. 이번에는 활성화 함수를 넣어 조금 그럴듯한 신경망을 만들어보도록 하겠습니다. 활성화 함수를 사용하지 않고 열심히 신경망만 깊게 쌓기만 하면 깊게 쌓는 의미도 없을 뿐더라 그냥 단층 신경망이라도 봐도 무방합니다. 그렇기 때문에 꼭 넣어주어야 깊게 쌓는 의미가 있습니다. Relu Class 저번 포스팅에서 만들었던 Affine class는 냅두고 Relu(렐루) 클래스를 한번 만들어 보겠습니다. Relu 함수는 예전 포스팅에서 한번 다루었는데 혹시나 약간 개념이 헷갈리거나 다른 활성화 함수에 대해 알고 싶다면 여기를 눌러 참고해주세요. Relu의 특징은 0이하면 0을 출력하고 0을 넘으면 그냥 그대로 출력하는 비교적 간단하..
흔히들 역전파, 영어로 하면 backpropagation이라고 하는 용어를 한번쯤은 들어보셨을 거라 생각합니다. 인공지능은 어떻게 학습하는 것인지, 역전파는(backpropagation)가 무엇인지 알아보도록 하겠습니다. 역전파 (backpropagation) 역전파는 말이 어려워보이는 것 뿐이지, 생각보다 어려운 개념은 아닙니다. 역전파를 이야기 할때는 순전파라는 개념을 알아야 되기 때문에 함께 이야기 하겠습니다.우선 개념 이해를 위해 쉬운 예를 들어보도록 하겠습니다. 우리는 중간고사와 기말고사등과 같은 시험을 잘 보기위해 학교에서나 학원에서 수업을 듣고는 합니다. 이렇게 공부를 하고 우리는 시험을 보게 되는데, 이러한 과정을 순전파(forwardpropagation)라고 합니다. 반대로 역전파는 이러..
저번 포스팅에 이어 이번에는 퍼셉트론에 대해 좀더 자세히 다뤄보겠습니다. 또한 직접 PYTHON으로 구현해보겠습니다. 단층 퍼셉트론 우선 AND Perceptron에 대해 알아보겠습니다. 그림의 원을 뉴런 혹은 노드라고 부릅니다. 입력 신호가 뉴런에 보내질 때는 각각의 고유한 가중치가 곱해집니다. (x0,x1,x2,w0,w1,w2) 뉴런에서 보내온 신호의 총 합이 정해진 한계를 넘어설 때만 1을 출력합니다. 이 이야기는 저번 포스팅떄도 예를 들어서 애기했습니다. 그렇다면 퍼셉트론의 동작원리를 잠시 수식으로 보겠습니다. 퍼셉트론 동작원리는 수식으로 나타내면 위와 같습니다. 퍼셉트론은 복수의 입력 신호 각각에 고유한 가중치를 부여합니다. 가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 적용됩니다. ..
저번 포스팅에서 이야기 한 활성화 함수 3가지는 가장 기본적인 활성화 함수이며, 흔히 쓰이는 활성화 함수입니다. 그런데 이 활성화 함수 외에도 더 많은 활성화 함수가 있습니다. 오늘은 그 외 나머지 활성화 함수에 대해서 이야기 해보도록 하겠습니다. 오늘 포스팅할 대부분의 활성화 함수는 Relu함수의 변형 버전이 많습니다. Relu 함수에서 변형된 활성화 함수들 Relu 함수에서 변형된 활성화 함수들은 아래와 같습니다. 물론 여기서 Softplus와 Tanh함수는 변형된 함수는 아니라는 점! 기억해주세요. 위의 그래프에서 Leaky ReLu, ELU가 Relu의 변형 함수입니다. 위 그래프 외에도 p-Relu와 swish함수도 다루어보겠습니다. Relu함수는 저번 포스팅때 현업에서도 많이 쓰인다고 이야기 ..
퍼셉트론(Perceptron)이란 무엇인지, 딥러닝의 역사에 대해 알아보겠습니다. 아시다시피 "딥러닝" 이라는 분야가 이렇게까지 뜨거워진지는 그리 오래되지는 않았습니다. 하지만 딥러닝 분야는 1943년부터 조금씩 조금씩 시작하고 있었습니다. 그렇다면 이제 퍼셉트론이 무엇인지, 역사가 어떻게 되는지 알아보겠습니다. History 1943년 미국의 신경외과 의사인 워렌 맥걸록에 의해서 발단이 되었습니다. 1957년 프랑크 로젠 블라크가 퍼셉트론 알고리즘을 보안했습니다. 사람의 뇌의 동작을 전기 스위치 on/off로 흉내낼 수 있다는 이론을 증명했습니다. Perceptron? 퍼셉트론은 인간의 신경세포 하나를 컴퓨터로 흉내낸 것을 말합니다. 인간의 신경세포라고해서 어려운 개념이 아닙니다. 고등학교 생물시간으로..
이번 포스팅에서는 활성화 함수가 무엇인지와 Python으로 간단하게 함수 구현을 해보도록 하겠습니다. 활성화 함수(Activation function) 활성화 함수란 신호의 총합을 받아서 다음 신호로 내보낼지 말지를 결정하는 함수를 이야기 합니다. 활성화 함수에는 사실 시그모이드(Sigmoid)와 렐루(Relu)함수 외에도 많은 활성화 함수들이 있습니다. 그중에서도 가장 기본적인 활성화 함수인 Sigmoid, Relu, Softmax 이 3가지에 대해 알아보겠습니다. 시그모이드(Sigmoid) 시그모이드 함수는 0에서 1사이의 실수를 출력하는 함수를 이야기 합니다. $$h(x)= \frac { 1 }{ 1+exp(-x) } $$ 시그모이드는 자연 상수인 $exp$을 사용하는데, vanishing 현상을 ..
신경망이라는 것을 접하면서 미분, 기울기와 같은 말을 몇번 들어봤습니다.우리는 왜 미분을 사용하는 것인지, 미분이 필요한 이유와 도함수를 Python 으로 간단하게 구현해보도록 하겠습니다. 미분이 필요한 이유 미분이 필요한 이유는 기존의 가중치를 갱신하기 위해서 사용합니다. 하지만 진정한 미분은 컴퓨터로 구현하기 어렵기 때문에 중앙 차분 오차가 발생합니다. 그래서 컴퓨터로 미분을 구현하기 위해서는 수치 미분을 사용해야 합니다. 함수 y=f(x)에 대해서 x가 x0에서 x0+h 로 변화할 때, y의 값은 f(x0+h)로 변화한다고 할 때, 평균 변화율은 아래와 같습니다. 그림을 보면 h가 서서히 0으로 다가가면 할선은 접선으로 다가갑니다. 이를 코드로 구현하려면 h가 되었을때가 진정한 미분이라고 할수 있는..