[머신러닝] Lecture 08 Neural Networks Representation

이재호·2025년 3월 4일

머신러닝

목록 보기
7/18

https://www.youtube.com/watch?v=o3x_AYc2kxQ&list=PLiPvV5TNogxIS4bHQVW4pMkj4CHA8COdX&index=8

비선형 classification의 경우 feature들의 차원 n에 따라 가설 함수가 복잡해질 수 있다. 그리고 이로 인해 파라미터의 차원이 높아질 수 있으며, 시간 복잡도가 매우 높아질 수 있기에 이는 매우 비효율적이다.

위 문제점을 해결하기 위해 Neuron 신경망을 모방하여 머신러닝에 적용한 Neural Network 개념이 나왔다. 아래 그림은 하나의 Logistic Unit을 보여주는 예시이다.

  • input wire xx : x=[x0x1x2x3]x=\begin{bmatrix}x_0 \\ x_1 \\ x_2 \\ x_3\end{bmatrix}
  • weights θ\theta : θ=[θ0θ1θ2θ3]\theta=\begin{bmatrix}\theta_0 \\ \theta_1 \\ \theta_2 \\ \theta_3\end{bmatrix}
  • output wire : hθ(x)=g(θ0x0+θ1x1+θ2x2+θ3x3)h_{\theta}(x)=g(\theta_0x_0+\theta_1x_1+\theta_2x_2+\theta_3x_3)

    bias unit x0x_0는 1로 설정한 후, 입력 벡터 xx에 대해서 activation funtion 값을 구한 후, 해당 activation function 값으로 최종 가설 함수 hθ(x)h_\theta(x) 값을 구한다.

다음은 여러 개의 Neuron을 갖는 Neural Network의 예시이다.

  • 위 그림에서 Layer 1은 "input layer"를 의미한다.
  • 위 그림에서 Layer 2은 "hidden layer"를 의미한다.
  • 위 그림에서 Layer 3은 "output layer"를 의미한다.
  • layer 1에서 각각의 파라미터 θ1j(1)\theta^{(1)}_{1j}, θ2j(1)\theta^{(1)}_{2j}, θ3j(1)\theta^{(1)}_{3j}를 입력값과 연산하여 activation func.에 적용한 후 a1(2)a_1^{(2)}, a2(2)a_2^{(2)}, a3(2)a_3^{(2)}을 구한다.
  • layer 2에서는 a1(2)a_1^{(2)}, a2(2)a_2^{(2)}, a3(2)a_3^{(2)}을 입력값으로 보고 파라미터 θ1j(2)\theta^{(2)}_{1j}, θ2j(2)\theta^{(2)}_{2j}, θ3j(2)\theta^{(2)}_{3j}와 연산하여 activation func.에 적용한 후 다음 값(a1(3)a_1^{(3)})을 구한다.
  • layer 3은 output layer이므로 정의된 함수에 의해서 최종값을 구한다.

자세한 내용은 다음 그림과 같다.

  • ai(j)a_i^{(j)} : jj번째 레이어에서의 유닛 ii들에 대해서 activation func.를 적용하여 나오는 값.
  • θ(j)\theta^{(j)} : jj번째 레이에서 j+1j+1번째 레이어로 넘어갈 때 유닛들과의 연산에 적용되는 weights 행렬.
  • 따라서 θ(j)\theta^{(j)}의 차원은 "다음 레이어의 유닛 수 x (현재 레이어의 유닛 수 + 1)"이다. 여기서 +1은 bias unit때문에 1을 추가한 것이다.

아래 그림은 위 과정을 벡터로 표현한 예시이다.

  • 유닛과 weight의 연산값들의 벡터를 zz로 표현하였다.
  • z(2)z^{(2)} : 1번째 레이어에서 weights θ(1)\theta^{(1)}과 units a(1)a^{(1)}을 연산하여 나온 값들의 벡터.
  • 유닛 값들의 벡터를 aa로 표현하였다.
  • a(2)a^{(2)} : 3번째 레이어 유닛 값들의 벡터로, 2번째 레이어에서 z(2)z^{(2)}에 대하여 activation func.을 적용한 결과값들의 벡터.

따라서 a(i)a^{(i)}가 다음 레이어의 입력값으로 적용한다는 것을 알 수 있다.

그리고 hidden layer는 다양하게 존재할 수 있으며, 따라서 neural network의 구조도 다양하게 존재할 수 있다.

이제 위 개념들을 가지고 XOR/XNOR 연산에 Neural Network를 적용해보자. 예시는 아래 그림과 같다.

  • 두 개의 입력값 x1x_1x2x_2가 존재한다.
  • 만약 x1x_1x2x_2가 서로 다르다면 y=0y=0, 같다면 y=1y=1로 본다.

위 과정을 위해 먼저 AND 연산에 대해서 적용해보자.

  • AND 연산에서 가설 함수는 다음과 같다. hθ(x)=g(30+20x1+20x2)h_\theta(x)=g(-30+20x_1+20x_2)
  • 따라서 우측 아래처럼 AND 연산에 해당하는 테이블을 구할 수 있다.

다음으로 OR 연산이다.

  • OR 연산에서 가설 함수는 다음과 같다. hθ(x)=g(10+20x1+20x2)h_\theta(x)=g(-10+20x_1+20x_2)
  • 마찬가지로 우측 부분과 같이 OR 연산에 해당하는 테이블을 구할 수 있다.

이제 NOT 연산에 대해서 적용해보자.

  • NOT 연산에서 가설 함수는 다음과 같다. hθ(x)=g(1020x1)h_\theta(x)=g(10-20x_1)
  • 우측 부분에서 NOT 연산에 해당하는 테이블을 확인할 수 있다.
  • 또한, NOT 연산을 통해서 (NOT x1x_1) AND (NOT x2x_2)를 구할 수 있다.

이제 위 연산들을 가지고 조합을 해서 x1x_1 XNOR x2x_2에 대한 전체 Neural Network를 구성해보자.
1. hθ(x)=30+20x1+20x2h_\theta(x)=-30+20x_1+20x_2 (= "x1x_1 AND x2x_2") -> a1(2)a^{(2)}_1
2. hθ(x)=1020x120x2h_\theta(x)=10-20x_1-20x_2 (= "(NOT x1x_1) AND (NOT x2x_2)") -> a2(2)a^{(2)}_2
3. hθ(x)=g(10+20a1(2)+20a2(2))h_\theta(x)=g(-10+20a^{(2)}_1+20a^{(2)}_2) (= "x1x_1 OR x2x_2")

또한, Neural Network는 여러 개의 클래스에 대한 분류도 가능하다. 위처럼 value가 결과값을 나오는 게 아니라 벡터가 결과값으로 나온다.

예시에서 결과 벡터의 차원은 R4\mathbb{R}^4으로, 벡터에는 pedestrian, car, motorcycle, etc.에 대한 각 값이 포함된다.

profile
천천히, 그리고 꾸준히.

0개의 댓글