편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
153번째 줄: | 153번째 줄: | ||
머신 러닝은 꾸준한 학습(경험)을 통해 점점 성능을 나아지게 하는 프로그램입니다. 머신 러닝은 크게 세 가지로 나눌 수 있는데, 다음과 같습니다. | 머신 러닝은 꾸준한 학습(경험)을 통해 점점 성능을 나아지게 하는 프로그램입니다. 머신 러닝은 크게 세 가지로 나눌 수 있는데, 다음과 같습니다. | ||
===Supervised Learning=== | ===Supervised Learning=== | ||
사람이 어떤 함수의 데이터와 | 사람이 어떤 함수의 데이터와 결과값을 몇 개 입력하면, 컴퓨터가 그것을 보고 사람이 의도한 함수에 매우 가까운 '''가설 함수'''(hypothesis)를 알아맞히는 방법입니다. 이때 식을 줄 수도 있고([[회귀]] 등), 아니면 다른 데이터를 넣었을 때의 결과값을 줄 수도 있습니다([[분류]] 등). 예를 들어, ([[선형 회귀]]) | ||
: (x, y) = (3, 7), (6, 8), (9, 9) | : (x, y) = (3, 7), (6, 8), (9, 9) | ||
라는 세 개의 데이터(x)와 | 라는 세 개의 데이터(x)와 결과값(y)을 주었고, 가설 함수가 | ||
: <math>H(x) = wx + b, \qquad</math>'''H'''ypothesis, '''w'''eight, '''b'''ias | : <math>H(x) = wx + b, \qquad</math>'''H'''ypothesis, '''w'''eight, '''b'''ias | ||
의 모양, 즉 [[일차식]]으로 주어졌다고 합시다. 그러면 컴퓨터는 w와 b를 바꾸어 가면서, 가설 함수와 데이터 사이의 차이를 최소화합니다. 최소화 과정을 거치면 컴퓨터는 다음의 결과를 낼 것입니다(약간의 오차는 있을 수 있습니다.): | 의 모양, 즉 [[일차식]]으로 주어졌다고 합시다. 그러면 컴퓨터는 w와 b를 바꾸어 가면서, 가설 함수와 데이터 사이의 차이를 최소화합니다. 최소화 과정을 거치면 컴퓨터는 다음의 결과를 낼 것입니다(약간의 오차는 있을 수 있습니다.): | ||
163번째 줄: | 163번째 줄: | ||
단지 데이터(x)만을 줍니다. 이때 컴퓨터는 주어진 데이터를 비슷한 것끼리 모으는 '''군집화'''를 할 수도 있고, 더 나아가 그 데이터의 분포를 맞히는 '''분포 추정'''을 할 수도 있습니다. | 단지 데이터(x)만을 줍니다. 이때 컴퓨터는 주어진 데이터를 비슷한 것끼리 모으는 '''군집화'''를 할 수도 있고, 더 나아가 그 데이터의 분포를 맞히는 '''분포 추정'''을 할 수도 있습니다. | ||
=== Reinforcement Learning=== | === Reinforcement Learning=== | ||
위 둘과 다르게, '''강화 학습'''은 현 상태를 보고 어떤 행동을 해야 좋을지를 판단합니다. 현 상태('''state''')에서 컴퓨터가 어떤 행동('''Action''')을 취하면 그에 따른 점수('''Result''', 보상)가 매겨집니다. 컴퓨터는 이 보상을 최대화하려고 다음에 어떤 행동을 해야 할 것인지 판단하는 정책('''Policy''')를 세웁니다. 예를 들어, [[자율 운전]]은 강화 학습의 예입니다. 사람이 운전하듯이, 자율주행 차량에 주어지는 데이터(state)는 카메라 영상이며, 이것으로 얼마나 앞에 무엇이 있는지를 판단합니다. 간단한 설명을 위해 왼쪽(-30도), 앞쪽(0도), 오른쪽(30도)으로의 세 거리를 측정할 수 있다고 합시다. 그리고 그 | 위 둘과 다르게, '''강화 학습'''은 현 상태를 보고 어떤 행동을 해야 좋을지를 판단합니다. 현 상태('''state''')에서 컴퓨터가 어떤 행동('''Action''')을 취하면 그에 따른 점수('''Result''', 보상)가 매겨집니다. 컴퓨터는 이 보상을 최대화하려고 다음에 어떤 행동을 해야 할 것인지 판단하는 정책('''Policy''')를 세웁니다. 예를 들어, [[자율 운전]]은 강화 학습의 예입니다. 사람이 운전하듯이, 자율주행 차량에 주어지는 데이터(state)는 카메라 영상이며, 이것으로 얼마나 앞에 무엇이 있는지를 판단합니다. 간단한 설명을 위해 왼쪽(-30도), 앞쪽(0도), 오른쪽(30도)으로의 세 거리를 측정할 수 있다고 합시다. 그리고 그 결과값이[[파일:MLRun.png.png|섬네일]] | ||
: (L, F, R) = (200, 100, 50) | : (L, F, R) = (200, 100, 50) | ||
이었다고 해 봅시다. 예를 들어 다음 그림과 같은 상황이 됩니다. | 이었다고 해 봅시다. 예를 들어 다음 그림과 같은 상황이 됩니다. | ||
276번째 줄: | 276번째 줄: | ||
# W가 1행 len(x_data)열인 이유는 내적 여러 개를 행렬곱으로 계산하기 위함입니다. | # W가 1행 len(x_data)열인 이유는 내적 여러 개를 행렬곱으로 계산하기 위함입니다. | ||
# W * x_data = [[_, _]] [[_, _, _, _, _], = [_, _, _, _, _] | |||
# W * x_data = [[ | # [_, _, _, _, _]] | ||
# | |||
X = tf.placeholder(tf.float32) | X = tf.placeholder(tf.float32) | ||
319번째 줄: | 318번째 줄: | ||
== 간단한 분류 모델 == | == 간단한 분류 모델 == | ||
주어진 데이터가 어떤 분류에 속하는지를 컴퓨터에게 가르쳐 보려 합니다. 즉, 'C1, C2, ...,위 Ck'라는 분류가 있을 때, 주어진 (n차원) 데이터 x가 어떤 분류에 속하는지를 알아보고 싶습니다. 하지만, 위(선형 회귀)에서 얻은 결괏값 y는 실숫값입니다. 우리는 이 실숫값을 '''분류에 속하는지 아닌지'''의 YES/NO로 바꾸어야 합니다. 즉, 결괏값은 0과 1로만 이루어진 k차원 벡터가 됩니다. 만약 이 분류들이 겹치지 않는다고 가정하면(mutually disjoint), 그 벡터는 단 한 성분에서만 1이고 나머지는 0인 '''one hot''' 방식의 벡터가 됩니다. | 주어진 데이터가 어떤 분류에 속하는지를 컴퓨터에게 가르쳐 보려 합니다. 즉, 'C1, C2, ...,위 Ck'라는 분류가 있을 때, 주어진 (n차원) 데이터 x가 어떤 분류에 속하는지를 알아보고 싶습니다. 하지만, 위(선형 회귀)에서 얻은 결괏값 y는 실숫값입니다. 우리는 이 실숫값을 '''분류에 속하는지 아닌지'''의 YES/NO로 바꾸어야 합니다. 즉, 결괏값은 0과 1로만 이루어진 k차원 벡터가 됩니다. 만약 이 분류들이 겹치지 않는다고 가정하면(mutually disjoint), 그 벡터는 단 한 성분에서만 1이고 나머지는 0인 '''one-hot''' 방식의 벡터가 됩니다. | ||
가장 합리적인 변환은, '''제일 큰 값만 살려두기'''입니다. 즉 결과 벡터 y를 각 분류에 들어가는 정도(들어갈 확률)로 한 후에, 가장 그 확률이 높은 분류를 정답으로 택합니다 | 가장 합리적인 변환은, '''제일 큰 값만 살려두기'''입니다. 즉 결과 벡터 y를 각 분류에 들어가는 정도(들어갈 확률)로 한 후에, 가장 그 확률이 높은 분류를 정답으로 택합니다. | ||
:<math>\mathbf y = \begin{bmatrix}\mathrm P(\mathbf x \in C_1) \\ \mathrm P(\mathbf x \in C_2) \\ \vdots \\ \mathrm P(\mathbf x \in C_k)\end{bmatrix} \xrightarrow{\mathrm{argmax}} \begin{bmatrix}\mathrm 0 \\ \vdots \\ 1 \\ \vdots \\ 0\end{bmatrix} </math> | |||
:<math>\mathbf y = \begin{bmatrix}\mathrm P(\mathbf x \in C_1) \\ \mathrm P(\mathbf x \in C_2) \\ \vdots \\ \mathrm P(\mathbf x \in C_k)\end{bmatrix | |||