Coursera Machine Learning -Week4- 요약(신경망 표현)
week4에서 학습하기
신경망
신경망이란?
뇌를 모방하려는 데이터 구조와 알고리즘.
신경망은 뇌 뉴런의 네트워크를 시뮬레이션함으로써 발전했다.
따라서, 우선 뉴런에 대하여 설명한다.
뉴런 모델링
뉴런은 많은 입력을 받고, 어떤 계산을 수행하고, 그 출력을 다른 뉴런으로 보냅니다. 다음 그림과 같이 모델링 할 수 있습니다.
여기에서는 뉴런을 로지스틱 회귀로서 모델화하고 있다. $h_\theta(x)$는 다음과 같습니다.
h_\theta(x) = \frac{1}{1 + e^{-\theta^T x}}
여기서 $\theta$와 $x$는 다음과 같습니다.
\theta = \begin{pmatrix}
\theta_0\\
\theta_1\\
\theta_2\\
\theta_3
\end{pmatrix}
,
\hspace{10px}
x = \begin{pmatrix}
x_0\\
x_1\\
x_2\\
x_3
\end{pmatrix}
$x_0$는 바이어스 항으로 항상 $x_0=1$. 따라서 $x_0$는 그림에 쓰지 않을 수 있다.
또한 $\theta $는 매개 변수 벡터로 가중치라고도합니다. 여기서 $\theta_0$는 바이어스 항에 걸리는 가중치를 나타낸다.
신경망 모델링
신경망은 뉴런이 몇 개 모인 그룹이다. 다음 그림과 같이 나타낼 수 있습니다.
기법 설명
a_i^{(j)} = j層のi番目のユニットの出力\\
\Theta^{(j)} = j層からj+1層への重みを表す行列
$j$계층에 $s_j$개 단위, $j+1$계층에 $s_{j+1}$개 단위가 있는 경우, $\Theta^{(j)}$의 차원은 $s_{ j+1}\times (s_j+1)$입니다.
이들을 사용하여 출력 $ h_\Theta (x) $는 다음과 같이 계산할 수 있습니다.
a_1^{(2)} = g(\Theta_{10}^{(1)}x_0 + \Theta_{11}^{(1)}x_1 + \Theta_{12}^{(1)}x_2 + \Theta_{13}^{(1)}x_3)\\
a_2^{(2)} = g(\Theta_{20}^{(1)}x_0 + \Theta_{21}^{(1)}x_1 + \Theta_{22}^{(1)}x_2 + \Theta_{23}^{(1)}x_3)\\
a_3^{(2)} = g(\Theta_{30}^{(1)}x_0 + \Theta_{31}^{(1)}x_1 + \Theta_{32}^{(1)}x_2 + \Theta_{33}^{(1)}x_3)\\
h_{\Theta}(x) = a_1^{(3)} = g(\Theta_{10}^{(2)}a_0^{(2)} + \Theta_{11}^{(2)}a_1^{(2)} + \Theta_{12}^{(2)}a_2^{(2)} + \Theta_{13}^{(2)}a_3^{(2)})
여기서 $g$는 로지스틱 함수로 한다.
다중 클래스 분류
이하의 도면과 같이, 출력층의 유닛을 복수 준비함으로써, 다 클래스 분류도 행할 수 있다.
이 때 출력을 다음과 같이 벡터의 한 요소만 1이 되도록 한다.
h_\Theta(x) \approx \begin{pmatrix}
1\\
0\\
0\\
0
\end{pmatrix}
,
\hspace{10px}
h_\Theta(x) \approx \begin{pmatrix}
0\\
1\\
0\\
0
\end{pmatrix}
,
\hspace{10px}
h_\Theta(x) \approx \begin{pmatrix}
0\\
0\\
1\\
0
\end{pmatrix}
,
\hspace{10px}
\hspace{10px}
h_\Theta(x) \approx \begin{pmatrix}
0\\
0\\
0\\
1
\end{pmatrix}
필기 숫자 인식과 같은 작업을 생각할 때,
h_\Theta(x) \approx \begin{pmatrix}
1\\
0\\
0\\
0
\end{pmatrix}
의 경우는 「숫자의 0」과 같이 각 벡터에 대하여 라벨을 할당함으로써, 다클래스 분류를 행할 수 있다.
필기 숫자 분류
아래 그림과 같이 0~9까지의 수기 숫자를 로지스틱 회귀와 신경망을 이용하여 분류하는 경우를 생각한다.
이번 분류에 사용하는 신경망은 입력층, 은폐층, 출력층 각각 하나씩 3층으로 구성되어 있다.
입력층에는 20px$\times$20px의 화상을 벡터화한 400개의 수치가 입력된다. 바이어스 항이 존재하기 때문에, 입력 층의 유닛 수는 401이된다. 출력층의 단위수는 0~9까지의 숫자를 인식하기 위해 10개 있다. 또한, 은닉층의 유닛수는 바이어스항을 포함하여 26개이다.
로지스틱 회귀를 이용한 경우의 정밀도는 94.6%였지만, 뉴럴 네트워크를 이용한 경우는 97.5%였다.
소스 코드
연습 코드를 Python으로 작성했으므로 읽고 싶은 사람은 부디.
h_\theta(x) = \frac{1}{1 + e^{-\theta^T x}}
\theta = \begin{pmatrix}
\theta_0\\
\theta_1\\
\theta_2\\
\theta_3
\end{pmatrix}
,
\hspace{10px}
x = \begin{pmatrix}
x_0\\
x_1\\
x_2\\
x_3
\end{pmatrix}
a_i^{(j)} = j層のi番目のユニットの出力\\
\Theta^{(j)} = j層からj+1層への重みを表す行列
a_1^{(2)} = g(\Theta_{10}^{(1)}x_0 + \Theta_{11}^{(1)}x_1 + \Theta_{12}^{(1)}x_2 + \Theta_{13}^{(1)}x_3)\\
a_2^{(2)} = g(\Theta_{20}^{(1)}x_0 + \Theta_{21}^{(1)}x_1 + \Theta_{22}^{(1)}x_2 + \Theta_{23}^{(1)}x_3)\\
a_3^{(2)} = g(\Theta_{30}^{(1)}x_0 + \Theta_{31}^{(1)}x_1 + \Theta_{32}^{(1)}x_2 + \Theta_{33}^{(1)}x_3)\\
h_{\Theta}(x) = a_1^{(3)} = g(\Theta_{10}^{(2)}a_0^{(2)} + \Theta_{11}^{(2)}a_1^{(2)} + \Theta_{12}^{(2)}a_2^{(2)} + \Theta_{13}^{(2)}a_3^{(2)})
h_\Theta(x) \approx \begin{pmatrix}
1\\
0\\
0\\
0
\end{pmatrix}
,
\hspace{10px}
h_\Theta(x) \approx \begin{pmatrix}
0\\
1\\
0\\
0
\end{pmatrix}
,
\hspace{10px}
h_\Theta(x) \approx \begin{pmatrix}
0\\
0\\
1\\
0
\end{pmatrix}
,
\hspace{10px}
\hspace{10px}
h_\Theta(x) \approx \begin{pmatrix}
0\\
0\\
0\\
1
\end{pmatrix}
h_\Theta(x) \approx \begin{pmatrix}
1\\
0\\
0\\
0
\end{pmatrix}
아래 그림과 같이 0~9까지의 수기 숫자를 로지스틱 회귀와 신경망을 이용하여 분류하는 경우를 생각한다.
이번 분류에 사용하는 신경망은 입력층, 은폐층, 출력층 각각 하나씩 3층으로 구성되어 있다.
입력층에는 20px$\times$20px의 화상을 벡터화한 400개의 수치가 입력된다. 바이어스 항이 존재하기 때문에, 입력 층의 유닛 수는 401이된다. 출력층의 단위수는 0~9까지의 숫자를 인식하기 위해 10개 있다. 또한, 은닉층의 유닛수는 바이어스항을 포함하여 26개이다.
로지스틱 회귀를 이용한 경우의 정밀도는 94.6%였지만, 뉴럴 네트워크를 이용한 경우는 97.5%였다.
소스 코드
연습 코드를 Python으로 작성했으므로 읽고 싶은 사람은 부디.
참고 자료
Reference
이 문제에 관하여(Coursera Machine Learning -Week4- 요약(신경망 표현)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Hironsan/items/803f935c06bb5435b6bf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)