2017년 12월 9일 토요일

ML 초보자를 위한 MNIST(MNIST For ML Beginners)(2)


출처 : https://www.tensorflow.org/get_started/mnist/beginners

이글은 영어 원본을 읽고 공부하면서 불필요한 내용 빼고 이해하기 쉽도록 적절히 내맘대로 작성해보았습니다. 이해가 잘못되어 원저자의 의도대로 번역이 안되어 있을 수도 있습니다. 이점 참고해서 읽어 주시면 고맙겠습니다


앞서 작성한 글
ML 초보자를 위한 MNIST(MNIST For ML Beginners)(1)


이 글은 앞서 작성한 글에 이어지는 글입니다.



Softmax 회귀

MNIST에서 각각의 이미지는 0~9사이의 손으로 씌여진 숫자인것을 알고 있습니다. 그래서 주어진 이미지가 될 수 있는것은 10가지가 됩니다. 우리는 이미지를 보고 각 숫자가 될 확률을 줄 수 있기를 원합니다. 예를들어 우리 모델이 9인 사진을 보고 그것이 9라는 확률이 80%이고, 8일 확률(왜냐하면 위쪽 때문에 8,9는 위쪽 모양이 동일해서) 5%를 그리고 다른 숫자일 확률은 작다고 줄 수 있습니다. 손글씨라서 불확실한 부분이 있기 때문에 100% 확신을 얻기는 어렵습니다.
이것은 softmax 회귀가 자연스럽고 단순한 고전적인 사례입니다. 여러 다른 것들 중 하나 인 객체에 확률을 할당하려 softmax를 사용하면 0과 1 사이의 값 확률을 얻게되고, 모든 확률의 합계는 1이 됩니다. 나중에 더 정교한 모델에서, 마지막 단계는 softmax의 레이어로 구성 될 것입니다.
softmax 회귀는 두 단계로 이루어집니다. 먼저 특정 클래스에 입력의 근거(evidence)를 추가 한 다음 해당 근거(evidence)를 확률로 변환합니다.
주어진 이미지가 특정 클래스에 있다는 근거(evidence)를 계산하기 위해 픽셀 강도의 가중 합을 계산합니다. 높은 강도를 갖는 픽셀이 해당 클래스에있는 이미지에 대한 반하는 근거(evidence)라면 가중치는 음수이고, 그것이 유리한 근거(evidence)라면 양수입니다.
다음 도표는 각 클래스에 대해 학습된 가중치를 보여 줍니다. 빨간 색은 음의 가중치를 나타내고 파란 색은 긍정적인 가중치를 나타냅니다.


바이어스라고 불리우는 추가 evidence를 더합니다. 기본적으로 입력은 어떤것들과 독립적일 가능성이 높다라고 말할 수 있습니다. (어떤 식에서 상수 부분을 바이어스라고 생각하면 됩니다.)그 결과 주어진 입력 x의 class i에 대한 evidence는 아래와 같이 표현 됩니다.


Wi는 가중치이고 bi는 class i를 위한 바이어스, j는 입력 이미지 x의 점들의 합계를 위한 인덱스입니다.
여기에서 i는 0에서 9까지 숫자이고 j는 784개 원소가 됩니다.
그리고 나서 그 증거를 Softmax 함수를 사용하여 예상 가능한 확률(y)로 변환합니다.


여기서 softmax는 "활성화" 또는"링크" 함수로서, 우리가 원하는 형태의 선형 함수를 형성하여 10건 이상의 확률 분포를 형성한다. 여러분은 그것을 우리가 각각의 클래스에 있는 우리의 입력의 가능성의 확률로 바꾸는 것으로 생각할 수 있습니다. 이는 다음과 같이 정의됩니다.
방정식을 확장하면 다음과 같이 됩니다.

입력 값을 지수화 한 다음 정규화합니다. 지수화는 하나의 evidence 단위가 모든 가설에 주어진 가중치를 곱셈적으로 증가 시킨다는 것을 의미합니다. 반대로 하나의 evidence 단위가 없다는 것은 가설이 초기 가중치의 일부를 얻는다는 것을 의미합니다. (이게 무슨말인지 상당히 어렵네요. 다시 설명하자면 지수 함수를 사용하는것은 가중치가 더 커지게 하는 효과가 있다고 합니다. 이렇게 하는 이유는 좋은 예측은 여러개중 하나만 1에 가까운 값을 나타내기 위함입니다. )
Softmax는 이 가중치를 정규화하여 최대 1을 가산하여 유효한 확률 분포를 형성합니다. (softmax 기능에 대한 더 많은 정보를 얻으려면 Michael Nielsen의 책에서 complete with an interactive visualization 섹션을 확인하십시오.)
softmax 회귀 분석은 다음과 같이 보일 수 있습니다.  x가 더 많지만, 여기에서는 3개정도만 표시하였습니다. 각 출력에 대해 x의 가중치 합계를 계산하고 바이어스를 추가 한 다음 softmax를 적용합니다.

이것을 방정식으로 써보면 아래와 같습니다.

우리는이 절차를 "벡터화 (vectorize)"하여 행렬 곱셈과 벡터 덧셈으로 바꿀 수 있습니다. 이는 계산 효율에 도움이됩니다.
좀 더 단순하게 표현하면 아래와 같습니다.

이제 텐서플로가 사용 할 수 있는것으로 바꿉시다.



댓글 없음:

댓글 쓰기