2-4 Rosenblatt의 퍼셉트론 알고리듬 N=1, N=2

in #kr6 years ago (edited)

noname01.png

Rosenblatt의 퍼셉트론이 작동하면 이미지 센서에서 측정된 전압에 따라 흑백 명암 값이 0∼256 범위로 얻어질 수 있으며 256으로 나누어 주면 0∼1.0 사이의 값이 얻어질 수 있다. 만약 컴퓨터에서 알고리듬만 가지고 작업할 경우 Random 한 입력 데이터 400개를 생성하기는 그다지 어렵지 않다. 예를 들어 Processing에서 x = random(1) 이란 명령을 실행하면 x 값은 항상 0∼1.0 사이의 실수에 해당하는 난수가 생성되며 반면에 음의 값도 필요하다면 x =random(-1, 1)과 같이 범위를 부여 하면 된다.

noname02.png

퍼셉트론 장치가 threshold 이상인 상태에서 정상적으로 작동한다는 전제하에서 알고리듬을 돌려보자. threshold 란 용어는 electronics에서 흔히 사용되는데 특히 다이오드의 경우 순방향 전압이 가해졌다고 무조건 전류를 흘리는 것은 아니고 어느정도 threshold 전압(문턱 전압)인 0.5V 수준에 도달해야 전류가 흐르게 된되며 이런 현상을 threshold 라고 한다. 조도센서는 물리학자로서 유적 실험으로 물리학 교과서에도 유명한 밀리칸이 발견했다는 주파수 threshold 현상이 있다고 한다. 빛의 RGB 성분 중 주파수가 가장 낮은 적색 빛은 조도센서를 구성하는 금속 물질에 강하게 빛을 조사해도 광전자가 발생이 일어나지 않는 threshold 현상이 Rosenblatt의 실험에 영향을 미치지 않았을까 조심스럽게 추측해 본다.

Rosenblatt 알고리듬의 첫 단계는 웨이트 벡터와 바이아스 벡터를 0으로 초기화하는 것이다. 초창기 컴퓨터에서 CPU 내 레지스터 사용에 있어서 시작전에 0 또는 상수 값으로 설정하는 제약이 이었던 것으로 이해하면 된다.
바이아스 벡터는 아예 0으로 설정하여 더 이상 논의에서 제외하고, indicator yi는 입력 데이터 발생 시에 함께 입력되는 라벨 값으로 둔다. 바이아스도 제값을 넣어주어야 온전하게 Rosenblatt의 알고리듬의 정당성을 확인해 볼 수 있겠으나 실제로 진행해 본 바 별 문제 없이 필요한 정보를 충분히 얻어 낼 수 있었다.

noname03.png

어차피 컴퓨터 코드의 알고리듬은 입력이 1개, 2개, 3개 일 때도 실행이 되어야 하고 400개는 물론 784개일 때도 실행이 되어야 한다. 그러므로 퍼셉트론의 원리를 이해할 목적이라면 입력 데이터 수 가장 작은 경우 N = 1부터 고려해 보자.

N=1: 조도센서 1개로 뭔가를 +1과 –1로 분류한다는 것이 우스꽝스러울 수도 있지만 그래도 N=1일 때를 통과해야 N=2일 때를 할 수 있는 것이다. 조도센서에 빛을 세게 쪼여 밝으면(B:bright) 1.0에 가까운 입력 값을 생성하게 되며 라벨 값 +1(을 부여하자. 반대로 어두울 정도로 빛이 약하면(D:dark) 0.0에 가까운 입력 값을 생성하고 라벨 값 –1(L)을 부여한다.

⓵ 입력 데이터 x = random(1) 명령에 의해 예를 들면 0.7이 출력되었다, 라벨 값 +1 을 부여한다.
알고리듬에 의하면 아래와 같이 웨이트 벡터와 입력 벡터를 내적 곱을 계산하여 0보다 크고 작음을 판별해야 한다.
noname04.png

하지만 초기에 웨이트 벡터 값을 0으로 설정했기 때문에 첫 번째 내적 계산은 무의미하며 곧 다음과 같이 웨이트 벡터 업데이트 과정으로 넘어가기로 한다.
noname05.png

다음 단계 즉 i+1 단계에서도 입력 데이터 X는 그대로며 W=0.7 이다.
noname06.png

이므로 yi의 값 +1과 일치 하므로 학습 완료

⓶ 입력 데이터가 예를 들면 0.1이 출력되었다, 라벨 값 -1 을 부여한다.
하지만 초기에 웨이트 벡터 값을 0으로 설정했기 때문에 첫 번째 내적 계산은 무의미하며 곧 다음과 같이 웨이트 벡터 업데이트 과정으로 넘어가기로 한다.
noname07.png

다음 단계 즉 i+1 단계에서도 입력 데이터 X는 그대로인데 W=-0.1 이다.
noname08.png

이므로 yi의 값 +1과 일치하므로 학습 완료

N=1일 때 얻어낸 위의 결과들은 과연 무엇을 의미하는가? 단지 Rosenblatt의 알고리듬이 아무런 이상이 없다는 점 외엔 발견할 수 있는 것이 없는듯하다.

즉 N=1일 때를 굳이 요약하면 성경 말씀에도 있듯이 태초에 빛과 어둠이 있었다가 정답인 듯 하다. 머신 러닝 관점에서 보면 밝을 때 웨이트 값이 있고 어두울 때의 웨이트 값이 따로 있다는 정도 아닐까?

N=2: 조도센서 2개로 생성할 수 있는 입력 벡터는 (X1, X2)가 된다. 각 입력 벡터 성분은 조도센서에 쪼여 주는 빛의 밝기에 따라 밝으면 B(bright) 어두우면 D(dark)가 된다. 따라서 2개의 조도센서로부터 얻어질 수 있는 입력 벡터는 BB,BD,DB,DD 4가지 경우가 있을 수 있으나 라벨 값은 2가지에 한정된다. 아래와 같이 표로 예를 들어 보자.
noname09.png

BB 이거나 DD이면 라벨 값을 각각 +1과 –1로 부여하면 된다. 그렇다면 BD 또는 DB 와 같이 애매한 경우는 어떻게 처리할 것인가? 분류 결과는 단 2종류 +1과 –1밖에 없는데 무슨 기준을 적용할 것인가?

다음과 같이 (X1, X2) 평면 상에 밝기 좌표 값을 작도해 보자. 대각선은 참고하기 위해서 임의로 그었다. 만약 입력 벡터들을 2종류로 분류할 수 있는 classifier 가 있다면 편리할뿐더러 애매한 상태의 조합 BD 와 DB 가 과연 어느 쪽에 속하는지 라벨 값을 부여 할 수 있을 것이다.

noname10.png

이 문제의 이해를 돕기 위해서 우리가 TensorFlow 로 코드를 작성한다고 하면 다음과 같이 작성될 것이다. 단 전제조건으로 +1과 –1을 one hot code로 각각 [1, 0], [0, 1]로 표현하자.

이미 Iris flower set data 분석에서 x_data 와 y_data 설정 사례를 참조하면서 다음과 같이 코드를 작성할 수 있다.
x_data = [ [0.7, 0.6], [0.8, 0.1], [0.2, 0.9], [0.3, 0.1] ]
y_data = [ [1,0], [0,1], [1,0], [0,1] ]

TensorFlow에는 이미 Softmax 와 경사하강법이 있으므로 학습을 시키기란 그냥 엔터키를 누르면 끝일 정도로 쉬운 일이다. 왜 이런 것이 가능한 것일까? Rosenblatt의 알고리듬이 경사하강법이 없었던 점만을 제외하면 본질적으로 같은 문제이기 때문이다.

noname11.png

그런데 과연 N=2일 때의 얻어진 결과는 N=1일 때와 비교하여 특별한 의미가 더해지기는 한 것일까? 특별히 얻어진 의미는 없다. 세상에 조도센서 2개로 만든 퍼셉트론으로 무엇을 분류해 낼 것인가?

찾아보면 눈에 딱 들어오는 예제가 있을듯한데 보이질 않는다. 하지만 이 N=2일 때의 문제는 가징 단순한 이원분류(binary calssification) 문제의 출발점으로서 대단히 중요한 의미가 있음에 유의하자. 사실 이 문제는 논리(Logic: AND OR XOR) 계산 분야로 불똥이 튈 수밖에 없는 문제로서 1970년대부터 머신 러닝의 활발한 연구개발이 완전히 중단되고 흑역사를 쓰는 계기가 되었다고 한다.

어떤 머신 러닝 문제에서도 입력 데이터 수가 극히 적은 경우에는 뭐가 뭔지 흐리한 듯 하면서 분간이 잘 가질 않는다. 그렇다면 Rosenblatt의 퍼셉트론의 센서의 수가 증가하게 되면 자연적으로 인지할 수 있는 대상물 종류가 늘어나게 되며 아울러 라벨 수도 증가하게 된다. 쉽게 말하면 해상도가 높으면 자세히 잘 보이므로 무엇인지 잘 알아낼 수 있다는 너무나 자명한 논리이다.

다시 본론으로 돌아와서 BD 즉 (0.8, 0.1) 의 경우에 대해서 알고리듬을 체크해 보기로 하자.
위 그래프에 의하면 대각선 아래에 위치하므로 라벨 값 -1 을 부여한다.

지난번 코딩 연습에서 언급했던 내용을 상기해보고 적용하자. Rosenblatt은 그의 알고리듬에서 N개로 구성되는 입력 값과 아울러 곱하기 작업을 할 웨이트 값을 벡터량으로 간주하여 내적 연산을 실행하며 다음과 같이 시그마에 의해 합산 작업을 하였다.
noname16.png

Rosenblatt의 퍼셉트론은 N이 400 이므로 웨이트도 400개가 되어야 한다. 하지만 우리가 작성하는 2개 입력 문제에서는 웨이트도 2개면 된다.

다음과 같이 웨이트 벡터를 업데이트 하자.
noname12.png

다음 단계 즉 i+1 단계에서도 입력 데이터 X는 그대로며 W=-0.9 이다.
noname13.png

이므로 yi의 값 -1과 일치 하므로 학습 완료

DB 즉 (0.2, 0.9) 의 경우 위 그래프에 의하면 대각선 위에 위치하므로 라벨 값 +1 을 부여한다.
noname14.png

noname15.png
이므로 yi의 값 +1과 일치 하므로 학습 완료

이로서 Rosenblatt 의 웨이트 업데이트 방식을 사용하면 아무런 문제없이 학습이 가능하다고 볼 수 있다.

※컴퓨터 알고리듬 자체는 간단하게 몇줄인데 숫자 대입을 해 검산을 하다보니 내용이 많이 딱딱해졌다는 느낌이 들것이다. 수알못에 해당하는 분들이 그런 부분의 내용을 잘 모르겠다고 해도 문제 될 것은 없다. 체크해 보니 Rosenblatt의 알고리듬이 N=1 과 N=2 일 때 문제 없이 실행 된다는 점을 확인하였다는 사실로 이해하자.

Sort:  

즐거운 스팀잇 생활하시나요?
무더위야 가라!!!!

잘보고 갑니다. 좋은하루 되세요 @codingart

@codingart 님 이번 연재도 잘읽었습니다.~ 그런데 수학 공식이 많이 나오니 눈이 어지럽네요.ㅎㅎ
머신러닝에 관심은 많은데 머리가 따라가질 못해서... 전 공부를 더 많이 해야겠어요.ㅠㅠ

수학공식 잘 이해 못해도 흐름을 잘 보시면 될 듯합니다. 매회 이어지는 뭐랄까 스토리 같은게 있거든요.

Congratulations @codingart! You have completed the following achievement on Steemit and have been rewarded with new badge(s) :

Award for the total payout received

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Do you like SteemitBoard's project? Then Vote for its witness and get one more award!

pairplay 가 kr-dev 컨텐츠를 응원합니다! :)

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.033
BTC 64498.18
ETH 3079.08
USDT 1.00
SBD 3.86