티스토리 뷰

뉴런 네트워크란 무엇인가요? 시작하기에 앞서, 저는 퍼셉트론이라고 불리는 가상 뉴런의 한 종류에 대해 설명하고자 합니다. 퍼셉트론은 워렌 맥클로치월터 피치선행 연구에 영감을 받아 과학자 프랭크 로젯블랫에 의해 1950년과 1960년대 사이에 개발되었습니다. 오늘날에는 다른 뉴런 모델을 사용하는 것이 일반적입니다. 이 책과 대부분의 현대적 연구에서 사용되는 주된 뉴런 모델은 시그모이드 뉴런 이라고 불리는 뉴런입니다. 곧 시그모이드 뉴런에 대해 다룰것 이지만 왜 시그모이드 뉴런이 왜 그렇게 정의되었는지 알기 위해서는 퍼셉트론을 첫번째로 이해하는 시간을 가지는 것이 좋겠습니다.


그래서, 퍼셉트론 어떻게 작동할까요? 퍼셉트론은 $x_{1}$, $x_{2}$, ...와 같은 몇개의 이진 입력을 받습니다. 그리고 하나의 이진 출력을 내보냅니다.



위의 예시에서는 퍼셉트론이 세개의 입력, $x_{1}$, $x_{2}$, $x_{3}$을 가지고 있습니다. 일반적으로 이보다 더 많거나 적은 입력을 가질 수 있습니다. 로젠블랫은 출력값을 계산하기 위한 하나의 간단한 규칙을 제안하였습니다. 그는 가중치, $w_{1}$, $w_{2}$, $w_{3}$, ...와같은 출력을 위한 각각의 입력들에 대한 중요도를 의미하는 실수 숫자들을 소개했습니다. 뉴런의 출력이 되는 0 또는 1은 $\sum_{j}w_{j}x_{j}$의 값이 어떤 $threshold$ 값보다 작거나 큰지에 따라 결정됩니다. 가중치과 같이, $threshold$는 뉴런의 변수 중 하나인 실수 숫자입니다. 더 명확한 용어로 표현하자면 다음과 같습니다.

$$\begin{eqnarray}\mbox{output} & = & \left\{ \begin{array}{ll}0 & \mbox{if } \sum_j w_j x_j \leq \mbox{ threshold} \\1 & \mbox{if } \sum_j w_j x_j > \mbox{ threshold}\end{array} \right.\tag{1}\end{eqnarray}$$

이것이 어떻게 퍼셉트론이 작동하는지에 대한 전부입니다!


이것이 기초적인 수학적 모델입니다. 여러분이 퍼셉트론에 대해 생각할 수 있는 방법은 여러 요소들의 중요도를 조정함에 따라 결정을 내리는 장치 하나를 생각하는것 입니다. 예시를 하나 들어보겠습니다. 매우 현실적인 예시는 아니지만 이해하기 쉬운 예시입니다. 그리고 우리는 후에 더 현실적인 예시를 들것입니다. 주말이 오고 있고 여러분은 여러분의 도시에 치즈 페스티벌이 있을 예정이라고 들었다고 합시다. 여러분은 치즈를 좋아합니다. 그리고 페스티벌에 갈지 가지 않을지 결정하고 있습니다. 여러분은 아마 다음 세 요소의 중요도를 조정하며 결정을 내리게 될 것 입니다.


1. 날씨가 좋은가?

2. 남자친구 혹은 여자친구가 함께 갈 것인가?

3. 페스티벌이 열리는 곳에 대중교통이 잘 되어 있는가? (여러분은 차가 없습니다)


우리는 이 세개의 요소를 각각의 대응하는 변수 $x_{1}$, $x_{2}$, $x_{3}$에 대입하여 표현할 수 있습니다. 예를 들어, $x_{1}=1$라면 날씨가 좋은것이고 $x_{1}=0$이면 날씨가 좋지 않은 것 입니다. 비슷하게, $x_{2}=2$라면 여러분의 남자친구 혹은 여자친구가 함께 갈 것이라는 뜻이고 $x_{2}=0$ 이라면 그렇지 않은 것 입니다. 또 비슷하게 $x_{3}$ 에 대해서는 대중교통의 유무를 의미합니다.


이제, 여러분이 정말 치즈를 좋아하고 남자친구 혹은 여자친구과 관심이 없더라도 심지어 페스티벌이 가기 힘든곳에 있더라고 정말 그곳에 가고싶다고 가정해 봅시다. 하지만 여러분이 나쁜 날씨를 정말 싫어하고 날씨가 나쁘다면 그곳에 갈 수 있는 방법이 없다고 해봅시다. 여러분은 이러한 의사결정 모델을 퍼셉트론을 이용하여 만들수 있습니다. 이 모델을 만드는 방법은 날씨에 대해 $w_{1}=6$ 으로 설정하고 다른 조건들에 대해 $w_{2}=2$, $w_{3}=2$로 설정하는 것 입니다. $w_{1}$ 의 큰 값은 남자친구 또는 여자친구가 여러분과 함께 갈 것인지 보다, 대중교통이 잘 되어있는지 보다 훨씬 더 날씨가 여러분의 의사 결정에 많은 영향을 준다는 뜻 입니다. 마지막으로, 퍼셉트론에게 $5$라는 $threshold$값을 선택했다고 합시다. 이 선택들에 따라, 날씨가 좋으면 1을 출력하고 날씨가 좋지 않으면 0을 내놓는 우리가 원하는 의사 결정 모델을 만들게 되었습니다. 남자친구 또는 여자친구의 동행 여부 또는 대중교통의 유무는 의사결정에 영향을 주지 않습니다.


이러한 가중치과 $threshold$값들을 다양하게 함으로써 우리는 다른 의사결정 모델을 얻을 수 있습니다. 예를 들어, $threshold$값으로 3을 선택했다고 합시다. 그러면 퍼셉트론은 여러분이 날씨가 좋거나 혹은 남자친구 또는 여자친구가 동행하면서 대충교통이 근처에 있다면 페스티벌에 가야한다고 결정할 것 입니다. 다른 말로, 이는 또 다른 의사결정 모델이 된다는 것 입니다. $threshold$값을 떨어뜨린다는 것은 여러분이 페스티벌에 갈 의사가 더 강하다는 뜻입니다.


당연히, 퍼셉트론은 완벽한 인간의 의사결정 모델이 아닙니다! 하지만 위의 예시가 보여주는 것은 어떻게 퍼셉트론이 결정을 내리기 위해 서로 다른 종류의 요소들의 중요도를 조정하는지 입니다. 그리고 퍼셉트론의 복잡한 네트워크는 꽤 복잡한 의사결정이 가능하다는 것이 당연해 보입니다.



이 네트워크에서, (우리가 첫번째 층이라고 부르는) 퍼셉트론의 첫번째 열은 입력 요소들의 중요도를 조정함에 따라 세개의 간단한 결정을 내립니다. 두번째 층은 어떤가요? 각각의 퍼셉트론은 첫번째 층의 의사결정에 의한 결과들의 중요도를 조정함에 따라 또 다른 의사결정을 합니다. 이를 통해 두번째 층에 있는 퍼셉트론은 첫번째 층의 퍼셉트론 보다 더 복잡하고 추상적인 수준의 의사결정을 할 수 있게 됩니다. 그리고 심지어 더 복잡한 의사결정이 세번 째 층에서 만들어 질 수 있습니다. 이렇게, 퍼셉트론의 다층 네트워크는 자세한 의사결정을 이끌어 낼 수 있습니다.


그러나, 제가 퍼셉트론을 정의했을때에 저는 퍼셉트론이 하나의 출력만을 가진다고 이야기 했습니다. 위의 네트워크에서는 퍼셉트론이 여러개의 출력을 가지고 있는 것 처럼 보입니다. 사실, 저것들은 여전히 하나의 출려입니다. 여러개의 출력을 화살표들은 단지 퍼셉트론의 출력이 몇개의 다른 퍼셉트론의 입력으로서 사용될 수 있음을 나타내는데 유용한 방법일 뿐입니다. 이는 갈라지는 하나의 출력선 보다는 훨씬 보기 좋습니다.


우리가 퍼셉트론을 설명하는 방법을 간단하게 해 봅시다. $\sum_{j}w_{j}x_{j}>threshold$이라는 조건은 길고 복잡합니다. 그리고 우리는 이것을 간단하게 두개의 기호를 이용해 변화시킬 수 있습니다. 첫번째 변화는 $\sum_{j}w_{j}x_{j}$를 내적으로 표현하여 $w\cdot x\equiv \sum_{j}w_{j}x_{j}$ 와 같이 바꿀 수 있고 $w$와 $x$가 있는 자리에는 가중치와 입력값들을 성분으로 하는 백터가 들어갑니다. 두번째 변화는 $threshold$를 부등식의 다른 변에 이항하고 이를 퍼셉트론의 $bias$를 의미하는 $b\equiv -threshold$로 바꾼것 입니다. $threshold$ 대신 $bias$를 씀으로써 퍼셉트론 규칙은 다음과 같이 다시 쓰여질 수 있습니다.

$$\begin{eqnarray}\mbox{output} = \left\{ \begin{array}{ll} 0 & \mbox{if } w\cdot x + b \leq 0 \\1 & \mbox{if } w\cdot x + b > 0\end{array}\right.\tag{2}\end{eqnarray}$$

여러분은 $bias$에 대해 얼마나 퍼셉트론이 1을 출력값으로 가지기 쉬운지에 대한 척도라고 생각할 수 있습니다. 또는 좀 더 생물학적인 용어로, $bias$는 얼마나 퍼셉트론이 잘 흥분하는지에 대한 척도라고 할 수 있습니다. 큰 $bias$를 가진 퍼셉트론은 1을 출력값으로 가지기 매우 쉽습니다. 하지만 $bias$가 음수의 값을 가지면 1을 출력으로 가지기 매우 어려워 집니다. 당연히 $bias$를 소개한것은 어떻게 우리가 퍼셉트론을 설명하는지에 대한 단지 작은 변화일 뿐입니다. 그러나 우리는 나중에 이것이 기호를 이용한 표기에서 편의성을 가져옴을 보게될 것 입니다. 이러한 이유로, 우리는 $threshold$를 사용하지 않고 계속해서 $bias$를 사용할 것입니다.


저는 퍼셉트론을 의사결정을 위해 요소들의 가중치를 조정하는 한 방법으로 설명하였습니다. 퍼셉트론이 사용될 수 있는 또 다른 방법은 AND, OR 그리고 NAND와 같은 논리 연산을 하는 것 입니다. 예를 들어 우리가 -2를 가중치고 가지는 두개의 입력과 $bias$가 3인 퍼셉트론이 있다고 하면 다음과 같이 그릴 수 있습니다.



우리는 입력이 $(0, 0)$ 이라면 1을 출력으로 가진다는것을 알 수 있습니다. 왜냐하면 $(-2)*0+(-2)*0+3=3$은 양수이기 때문입니다. 여기에 저는 곱셈 연산을 명확히 하기위해 $*$이라는 기호를 사용하였습니다. (역주: 내적 또는 외적 연산자와 확실히 구별하기 위함으로 추정.) 비슷한 연산으로 입력이 $(0, 1)$일 때와 $(1, 0)$일 때는 출력으로 1을 갖습니다. 그러나 입력이 $(1, 1)$이 되면 0을 출력으로 내놓습니다. 왜냐하면 $(-2)*1+(-2)*1+3=-1$은 음수이기 때문입니다. 그렇기 때문에 이 퍼셉트론은 NAND 함수를 구현한 것 입니다!


NAND 함수의 예시는 우리가 간단한 논리함수를 연산하는데 퍼셉트론을 사용할 수 있음을 보여줍니다. 사실, 우리는 퍼셉트론의 네트워크로 어떠한 논리 연산도 할 수 있습니다. 그 이유는 우리는 NAND 함수로는 어떠한 연산도 가능하기 때문입니다. 예를 들어, 우리는 NAND 함수를 이용하여 $x_{1}$, $x_{2}$ 두개의 비트를 더하는 회로를 구현할 수 있습니다. 이는 비트연산, $x_{1}\oplus x_{2}$와 $x_{1}$, $x_{2}$의 값이 모두 1일때 1의 값을 가지는 올림자리 비트(carry bit)를 필요로 합니다. carry 비트는 비트곱셈 $x_{1}x_{2}$으로 구할 수 있습니다.



퍼셉트론으로 이루어진 동등한 네트워크를 얻기 위해서는 우리는 모든 NAND 함수를 가중치가 -2인 두개의 입력과 $bias$가 3인 퍼셉트론으로 바꾸어야 합니다. 여기 그 결과물이 있습니다. 제가 오른쪽 아래의 NAND 회로에 해당하는 퍼셉트론을 화살표를 그리기 쉽도록 조금 이동하여 그렸습니다.



이 퍼셉트론 네트워크의 기억할 만한 부분은 왼쪽에 있는 퍼셉트론의 출력이 오른쪽 아래에 있는 퍼셉트론의 입력으로써 두번 사용되었다는 것 입니다. 제가 퍼셉트론의 모델의 정의할때 이러한 같은곳으로의 이중 출력이 가능한지 아닌지 이야기 하지 않았습니다. 사실, 이는 그리 문제되지 않습니다. 이러한 것을 원하지 않는다면, 간단히 두 입력을 하나의 입력으로 만들어 가중치가 -4가 되도록 하면 됩니다. (만약 이것이 당연하다고 생각하지 않는다면, 여러분은 여기서 잠시 멈추고 두 경우 모두 같은 결과가 나옴을 스스로 증명해 보아야 합니다. 이러한 변화를 거치고 나면 네트워크는 다음과 같이 보여질 것 입니다. 특별히 명시되지 않은 가중치는 -2의 값을 가지고 $bias$는 모두 3이며 하나의 가중치에만 -4의 값을 가집니다.



지금까지 저는 $x_{1}$과 $x_{2}$와 같은 입력들을 네트워크의 왼쪽에 떠다니는 변수로 그려놓았으나, 사실 이는 퍼셉트론의 추가적인 레이어로 그릴 수 있습니다.



이러한 입력이 없고 출력만 존재하는 퍼셉트론에 대한 표기는



위와 같이 짧게 표기할 수 있습니다. 이것이 퍼셉트론이 입력이 존재하지 않는다는 의미는 아닙니다. 이것을 이해하기 위해, 우리가 입력이 없는 퍼셉트론을 가지고 있다고 가정해 봅시다. 그렇게 된다면 $\sum_{j}w_{j}x_{j}$의 값은 0이 될것이고, $b>0$이라면 출력은 1이 될것이고 $b\leq 0$이라면 출력값은 0이 될것입니다. 이 말은, 퍼셉트론은 고정된 값만을 내놓는다는 것 입니다. 입력 퍼셉트론을 하나의 퍼셉트론 보다는 원하는 값인 $x_{1}$, $x_{2}$, ...을 내놓도록 정의된 특별한 단위로써 보는것이 더 낫습니다.


위 가산회로 예시는 어떻게 퍼셉트론 네트워크가 수많은 NAND 회로들을 가지고 있는 회로를 시물레이션 할 수 있는지 입증해 줍니다. 그리고 NAND 회로가 모든 연산에 대해 사용될 수 있기에 퍼셉트론 또한 모든 연산에 사용 가능하다는 결론을 이끌어 낼 수 있습니다.


퍼셉트론의 이러한 범용성은 만족스럽기도 하지만 한편으로 실망스럽기도 합니다. 이것이 만족스러운 이유는 퍼셉트론의 네트워크가 그 어떤 연산장치만큼 강력할 수 있기 때문입니다. 또한 이것이 실망스러운 이유는 퍼셉트론이 단지 NAND회로의 새로운 한 종류에 불과하기 때문입니다. 그것 참 인정하기 힘들군요!


그러나, 이런 시작에서 보여지는 것 보다 실제 상황은 훨씬 더 좋습니다. 이는 우리가 가상 뉴런의 네트워크의 가중치와 $bias$들을 자동으로 조정해 주는 학습 알고리즘을 창안할 수 있다는 것을 보여줍니다. 이러한 조정은 프로그래머의 의한 직접적인 개입 없이도 외부 시물레이션에서 이루어 질 수 있습니다. 이러한 학습 알고리즘은 동일한 논리회로와는 근본적으로 다른 방법으로 가상 뉴런들을 사용할 수 있도록 해줍니다. NAND 회로와 다른 논리 화로로 이루어진 회로를 정확히 배열하는것 대신에 우리의 뉴런 네트워크는 직접 회로를 디자인 하기 어려운 문제더라도 학습하여 문제를 해결할 수 있습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday