역전파는 어떻게 네트워크에서의 가중치와 $bias$의 변화가 비용함수를 바꾸는지에 대한 이해에 관한 것 입니다. 궁극적으로, 이는 $\partial C/\partial w^l_{jk}$ 그리고 $\partial C/\partial b^l_j$에 대한 편미분을 계산하는 것을 의미합니다. 그러나 이것을 계산하기 위해서 우리는 먼저 $l^{th}$ 층에 있는 $j^{th}$뉴런에서 error 라고 부르는 $\delta^l_j$라는 중간값을 소개하려고 합니다. 역전파는 error $\delta^l_j$를 계산하기 위한 과정을 말해주며 $\delta^l_j$를 $\partial C/\partial w^l_{jk}$와 $\partial C/\partial b^l_j$와 관련지어줍니다. 어떻게 error 가 정의되는..
역전파 알고리즘은 일반적인 선형 대수학 연산자를 기반으로 합니다. 백터의 덧셈, 행렬으로 백터를 곱하는 등등... 하지만 한 연산자는 보통 잘 사용되지 않습니다. 특히, 같은 차원의 두 백터 $s$, $t$가 있다고 가정해 봅시다. 그러면 우리는 $s\odot t$를 두 백터의 각 성분마다의 곱으로 사용할 수 있습니다. 따라서 $s\odot t$의 연산은 단지 $(s\odot t)_j=s_j t_j$으로 이루어 집니다. 예를 들면, $$\begin{eqnarray}\left[\begin{array}{c} 1 \\ 2 \end{array}\right] \odot \left[\begin{array}{c} 3 \\ 4\end{array} \right]= \left[ \begin{array}{c} 1 * 3 \..
역전파의 목적은 네트워크의 어떠한 가중치 $w$ 또는 bias $b$에 대한 비용함수 $C$의 편미분 $\partial C/\partial w$ 그리고 $\partial C/\partial b$를 계산해내는 것 입니다. 역전파가 작동하기 위해서 우리는 비용함수의 형태에 대한 두가지 주된 추측을 만들어 볼 필요가 있습니다. 두 추측을 이야기 하기 전에, 머릿속에 비용함수의 예를 생각하는것이 도움이 되겠군요. 우리는 저번 장에서의 사용했던 이차 비용함수를 사용할 것입니다. 마지막 섹션에서의 표기에서, 이차 비용함수는 다음과 같은 형태를 갖습니다. $$\begin{eqnarray} C = \frac{1}{2n} \sum_x \|y(x)-a^L(x)\|^2,\tag{26}\end{eqnarray}$$ $n$은 ..
역전파를 언급하기 이전에, 뉴런 네트워크로 부터의 결과를 계산하기위한 빠른 행렬기반 알고리즘부터 시작해 봅시다. 사실 우리는 이미 전 장의 마지막 부분에서 이 알고리즘에 대해 요약적으로 보았습니다. 하지만 저는 이를 매우 빠르게 설명하였고 우리는 이 세부사항에 대해 다시 살펴볼 가치가 있습니다. 특히, 이는 비슷한 상황에서 역전파에 사용된 여러 기호들에 익숙해 지는 좋은 방법입니다. 모호한 방법으로 뉴런 네트워크의 가중치들을 언급하는 한 기호로 부터 시작해 봅시다. 우리는 $w^l_{jk}$라는 기호를 $l^{th}$ 층에 있는 $j^{th}$ 뉴런을 가리키는 $(l-1)^{th}$ 층에 있는 $k^{th}$ 뉴런의 연결을 나타내는데 사용할겁니다. 그래서, 예를 들면, 아래 다이어그램은 네트워크의 세번째..
전 장에서 우리는 어떻게 뉴런 네트워크가 기울기 하강 알고리즘을 사용해서 가중치와 $bias$를 학습하는지에 대해 보았습니다. 그러나 여기에서 우리의 설명에는 큰 구멍이 하나 있었습니다: 우리는 어떻게 비용함수의 기울기를 계산하는지 이야기 하지 않았습니다. 정말 큰 구멍입니다! 이 장에서 저는 역전파 라고 알려진 그런 기울기를 계산하는 빠른 알고리즘에 대해서 설명할 것 입니다. 역전파 알고리즘은 1970년대에 처음 소개되었지만, 데이비드 루멜하트, 제프리 힌튼, 그리고 로널드 윌리엄스의 유명한 1986년도의 논문이 나오기 전 까지는 그 중요성이 인정되지 않았습니다. 이 논문은 이전에는 풀리지 않았던 문제들을 풀 수 있는 뉴런 네트워크의 사용을 가능케 하면서 이전의 학습에 대한 접근방법보다 역전파 알고리즘..
우리의 뉴런 네트워크가 인상적인 성과를 보여주었지만, 이러한 성과는 약간 미스테리 합니다. 가중치들과 $bias$들은 자동적으로 조정되었습니다. 그리고 이는 네트워크가 이뤄낸 일을 도데체 어떻게 이루어 낸건지에 대한 설명을 즉시 할 수 없음을 의미합니다. 우리의 네트워크가 손글씨를 판별하고 있음에 대한 원리를 이해하기 위한 방법을 찾을 수 있을까요? 그리고, 그 원리들을 통해, 더 좋은 결과를 만들어 낼 수 있을까요? 이 질문들을 더 완벽히 하자면, 수십년 후에 뉴런 네트워크가 인공지능(Artificial Inteligence)을 이끌어 간다고 가정해 봅시다. 우리가 어떻게 지능적인 네트워크가 작동하는지 이해할 수 있을까요? 어쩌면 네트워크는 스스로 학습하였기 때문에 우리가 이해하지 못하는 가중치들과 $..
좋습니다, 이제 확률적 기울기 하강 알고리즘과 MNIST 학습 데이터를 이용하여 손글씨를 인식하는 프로그램을 작성하여 봅시다. 우리는 파이썬 2.7로 작성된 단지 74줄의 프로그램을 작성하게 될것입니다! 첫번째로 필요한것은 MNIST 데이터를 가져오는것입니다. 여러분이 git 사용자라면 이 책의 코드 레포지토리를 복사함으로써 데이터를 얻을 수 있습니다. git clone https://github.com/mnielsen/neural-networks-and-deep-learning.git 여러분이 git 사용자가 아니라면, 이곳에서 데이터와 코드를 다운로드할 수 있습니다. 그런데 제가 MNIST 데이터를 앞에서 설명할 때, 제가 이 데이터가 60,000개의 학습 이미지들과 10,000개의 테스트 이미지로 ..
이제 우리는 우리의 뉴런 네트워크를 위한 설계도를 가지고 있습니다. 어떻게 하면 이 네트워크가 숫자를 인식하도록 학습을 할 수 있을까요? 우리에게 필요한 첫번째는 학습 데이터 셋이라고 불리는 데이터 입니다. 우리는 MNIST 데이터 셋을 사용할 것 입니다. 이는 정확한 분석결과와 함께 손으로 쓰인 수만개의 숫자들을 스캔한 이미지를 가지고 있습니다. MNIST의 이름은 NIST에 의해 수집된 두개의 데이터 셋을 수정한 별도의 셋이라는 사실로 부터 지어졌습니다. NIST는 United States' National Institute of Standards and Technology의 약자 입니다. 아래 사진은 MNIST로 부터 가져온 몇장의 사진 입니다. 위에 보이는 것 처럼, 이 숫자들은 사실 이 챕터의 ..
뉴런 네트워크에 대해 정의하면서, 다시 손으로 쓴 숫자를 인식하기 위한 문제로 돌아와 봅시다. 우리는 이 문제를 크게 두개의 문제로 나누어 생각할 수 있습니다. 첫째로, 많은 숫자가 포함된 이미지를 여러개의 조각난 이미지로 나누는 것입니다. 각각의 조각난 이미지는 하나의 숫자를 가지고 있습니다. 예를 들어, 다음과 같은 이미지는 다음과 같이 여섯 개의 이미지로 나누어 질 수 있습니다. 우리와 같은 인간들은 이 분리 문제를 쉽게 해결할 수 있으나, 이를 정확히 나누는 컴퓨터 프로그램에게는 꽤 도전적입니다. 일단 한번 이미지가 분리되고 나면, 프로그램은 각 이미지를 판별해야 합니다. 그래서, 예를 들면, 우리는 위에 있는 이미지중 첫번 째 이미지의 숫자를 판별하는 프로그램을 작성하고자 합니다. 첫번째 이미지..
다음 차례에서는 손글씨를 꽤 잘 인식할 수 있는 뉴런 네트워크를 소개해 드릴겁니다. 그 전에, 네트워크의 각 부분을 부르는 몇 개의 전문 용어들을 설명하는 것이 도움이 되겠군요. 우리가 아래와 같은 네트워크를 가지고 있다고 해봅시다. 앞서 언급했듯이, 가장 왼쪽에 위치한 층은 입력 층이라고 불리고, 그 안에 있는 뉴런들은 입력 뉴런이라고 불립니다. 가장 오른쪽에 있는 출력층은 출력 뉴런들을 가지고 있습니다. 위 예시에서는 하나의 뉴런만을 가지고 있군요. 가운데 있는 층은 입력 뉴런 또는 출력 뉴런을 가지고 있지 않으므로 은닉층이라고 불립니다. "은닉"이라는 용어는 이상하게 들릴 수 있습니다. (제가 처음 이 단어를 들었을때는 이 은닉층이 꽤 깊은 철학적 의미 또는 수학적 중요성을 가지고 있는줄 알았습니다..
- Total
- Today
- Yesterday