인공지능 17

초기 인공지능 알고리즘과 로지스틱 회귀

로지스틱 회귀를 제대로 이해하려면 로지스틱 회귀로 발전된 초창기 인공지능 알고리즘들을 순서대로 살펴보면 된다. 첫 번째로 알아볼 알고리즘은 '퍼셉트론'이다. 퍼셉트론 이진 분류 문제에서 최적의 가중치를 학습하는 퍼셉트론(Perceptron) 알고리즘은 1957년 코넬 항공 연구소(Cornell Aeronautical Lab)의 프랑크 로젠블라트(Frank Roseblatt)가 발표하였다. 여기서 이진 분류(binary classification)란 임의의 샘플 데이터를 True나 False로 구분하는 문제를 말한다. 예를 들어 과일이라는 샘플 데이터가 있을 때 사과인지(True), 아닌지(False)를 판단하는 것이 이진 분류에 해당한다. 퍼셉트론은 직선 방정식을 사용하기 때문에 선형 회귀와 유사한 구조..

선형 회귀를 위한 뉴런 만들기

이전 글에서 만든 경사 하강법 알고리즘을 Neuron이라는 이름의 파이썬 클래스로 만들어보겠다. 즉, 뉴런을 만들어보겠다. 이후에 포스팅할 알고리즘들은 이 클래스를 기반으로 확장된다. 위의 코드를 보면 코드는 간단하지만 딥러닝이 사용하는 경사 하강법 알고리즘의 핵심이 담겨 있는걸 볼 수 있다. 딥러닝은 이렇게 간단한 연산의 조합으로 이루어져 있다. __init__()은 초기화 메서드다 가중치와 절편을 각각 1.0으로 초기화해줬다. forpass()는 정방향 계산을 위한 메서드이다. 여기서 정방향 계산이란 쉽게말해 y^을 구하는 것이다. w, x, b가 뉴런의 왼쪽에서 오른쪽 방향으로 흘러 y^이 되기때문에 정방향 계산이라는 용어를 사용한다. backprop()는 역방향 계산을 위한 메서드이다. 여기서 역..

손실 함수와 경사 하강법의 관계

이번 글에서는 경사 하강법이 실제로 어떤 개념이 사용되었는지 알아보겠다. 경사 하강법을 좀 더 기술적으로 표현하면 '어떤 손실 함수(loss function)가 정의되었을 때 손실 함수의 값이 최소가 되는 지점을 찾아가는 방법'이다. 여기서 손실 함수란 말 그대로 예상한 값과 실제 타깃 값의 차이를 함수로 정의한 것을 말한다. 사실 앞에서 사용한 방법인 '오차를 변화율에 곱하여 가중치와 절편 업데이트하기'는 '제곱 오차'라는 손실 함수를 미분한 것과 같다. 제곱 오차(squared error)는 이름은 거창하지만 타깃값과 예측값을 뺀 다음 제곱한 것에 불과하다. 제곱 오차를 수식으로 나타내면 'SE = (y-y^) ²'이다. 이때 제곱 오차가 최소가 되면 산점도 그래프를 가장 잘 표현한 직선이 그려진다...

경사 하강법

위 산점도에 가장 잘 맞는 직선을 그린다면 어떤 모습일까. 가운데 그림의 직선이 다른 두 직선보다 데이터를 잘 표현하고 있다는 것을 직관적으로 알 수 있다. 즉, 데이터를 표현하는 점들의 가운데 지점을 가로지르는 직선을 자연스럽게 찾아낼 수 있다. 위 그래프는 1개의 특성에 대한 타깃 데이터를 그림으로 표현한 것인데 10개의 특성으로 그래프를 그린다면 11차원 그래프는 그릴 수도 없지만 11차원 공간을 가로지르는 초평면은 상상하기도 어렵다. 그래서 보통은 특성의 개수를 1, 2개만 사용하여 2차원이나 3차원 그래프로 그리는 경우가 많다. 항상 그런 것은 아니지만 낮은 차원에서 얻은 직관은 높은 차원으로 확장될 수 있으므로 위와 같이 입력 데이터의 특성 1개를 골라 시각화하는 경우가 많다. 선형 회귀와 경..

선형 회귀와 데이터 준비

선형 회귀(Linear Regression) 선형 회귀는 아주 간단한 1차 함수로 표현할 수 있다. 위 1차 함수의 기울기(slope)는 a이고 절편(intercept)는 b이다. 보통 1차 함수 문제는 x에 따른 y의 값에 집중하는데 선형 회귀에서는 이와 반대로 x, y가 주어졌을 때 기울기와 절편을 찾는데 집중한다. 즉, 선형 회귀의 주요 관심사는 '절편과 기울기를 찾는 것'이다. 예를 들어 x가 3일 때 y는 25, x가 4일 때 y는 32, x가 5일 때 y는 39라면 기울기와 절편의 값이 뭘까. 조금만 생각해 보면 정답은 기울기는 7, 절편은 4임을 알 수 있다. 그러면 선형 회귀는 위와 같은 문제를 어떤 과정을 통해 해결할까. 바로 기울기와 절편을 계속 변화시키면서 문제를 해결한다. 기울기와 ..

딥러닝을 위한 도구들

* 여기서는 구글의 코랩을 사용하여 실습하며 코랩의 사용법은 따로 설명하지 않는다. 넘파이(NumPy) 넘파이는 파이썬의 핵심 과학 패키지 중 하나이다. 많은 머신러닝과 딥러닝 패키지가 넘파이를 기반으로 구현되었고 넘파이 인터페이스를 계승하고 있기 때문에 넘파이는 꼭 익혀야 하는 파이썬 패키지 중 하나이다. 여기서는 기본적인 기능만 설명한다. 다차원 배열은 파이썬 리스트로 만들어 사용해도 되지만 파이썬 리스트로 만든 배열은 배열의 크기가 커질수록 성능이 떨어진다는 단점이 있다. 바로 이런 경우에 넘파이를 사용한다. 넘파이는 저수준 언어로 다차원 배열을 구현했기 때문에 배열의 크기가 커져도 높은 성능을 보장한다. 또 배열을 이용한 다양한 통계, 수학 함수도 제공한다. 위의 코드를 보면 파이썬의 import..

인공지능 vs 머신러닝 vs 딥러닝

인공지능(Artificial Intelligence)이란 인공지능은 '사람의 지능을 만들기 위한 시스템이나 프로그램'을 말한다. 예를 들어 알파고는 '사람처럼 바둑을 둘 수 있게 만들어진 프로그램'이고 음성 비서는 '사람이 음성으로 질문한 것에 대한 답을 사람처럼 답을 할 수 있도록 만들어진 프로그램'이다. 인공지능은 크게 약 인공지능(weak AI), 강 인공지능(strong AI)으로 나뉘는데 영화 아이언맨의 자비스, 로봇아이의 로봇들 처럼 사람과 구분이 안 될 정도로 강한 성능을 가진 인공지능을 강 인공지능이라 하고 테슬라의 자율주행, 아이폰의 음성 비서 시리, 구글의 인공지능 스피커 구글 홈 처럼 특정 영역에 특화되어 현재 인간들의 생활을 보조하는 기술로 많이 사용되고 있는 인공지능을 약 인공지능..