그냥 개발자 블로그

[인공지능] 자바스크립트로 머신러닝 학습하기 - 정방향 본문

프로그래밍팁/javascript

[인공지능] 자바스크립트로 머신러닝 학습하기 - 정방향

마음이파파 2017. 8. 2. 08:30

x:입력, y:출력, w:가중치, b:바이어스


인공지능과 관련된 검색을 하다보면 위와 같은 모델 이미지를 많기 보게 됩니다.  그러나 위 이미지는 일반적으로 인공지능을 학습할때 사용되는 형태의 모델이 아닙니다. 이해를 돕기 위해 약간의 수정을 하였습니다.


인공지능은 뉴런이 수백, 수천, 수만 개가 모여 어려운 문제를 풀거나 예측하게 됩니다. 따라서 뉴런이 가장 기초적인 요소이며 매우 중요합니다. 위 모델 이미지는 "싱글 뉴런"을 이미지화 한것 입니다. 싱글 뉴런이란, 하나의 입력이 들어가서 하나의 출력이 나오는 형태를 이야기하며, 인공지능의 기초를 이해하는데 더 없이 좋은 예가 됩니다.



지난번 2017/07/31 - [LAB] - [인공지능] 자바스크립트로 머신러닝 학습하기 - 원리 에서 "1킬로미터를 0.62마일로 바꾸려면 어떻게 해야 할까?" 라는 문제로 인공지능을 구현 해볼 겁니다. 단, 인공지능 개념 이해에 부담감을 덜어 드리기 위해서 수학적인 부분의 설명은 제외하겠습니다. 수학적으로 더 궁금하신 분들은 구글에서 검색해 보시면 많이 나와 있습니다. 또한 파이썬, C++ 로 개발된 인공지능이 대다수 겠지만 이번 블로그 글 취지에 맞게 많은 분들이 이용하시는 자바스크립트를 이용하여 이해를 돕고자 합니다.







지난번 정방향에 대해서 이야기 했었는데요. x(입력)->y(출력) 로 가는 것을 정방향이라고 합니다. 오늘은 정방향에 대해서 샘플코드와 함께 설명 드리겠습니다.


x로 인하여 y가 변합니다. 그러나 x와 y는 답이 이미 정해져있기 때문에 건들지 않고, 대신 w(가중치)와 b(바이어스)가 x(입력)를 보조하여 y(출력)가 정답이 나올 수 있도록 합니다.






<script>


function ai(){

    this.w = 0; //가중치

    this.b = 0; //바이어스

}


</script>

 

관리를 편하게 하기 위해서 ai() 라는 함수를 하나 만들고 x를 보조할 w와 b를 변수로 넣어 주었습니다.






<script>


function ai(){

    this.w = 0; //가중치

    this.b = 0; //바이어스

    this.forward = function(x){


        y = x * this.w + this.b;

        

        return y;

    };

}


</script>

 

forward라는 함수를 추가하여 정방향 코드를 추가해줍니다. y = x * w + b 는 뉴런 구현시 고정된 규칙으로 w와 b가 x를 보조하여 y를 만들어 낸다는것만 기억하시면 됩니다. 


추가로 더 설명 드리면 입력이 여러개인 뉴런이 필요할 경우에는 y = x0 * w0 + x1 * w1 + .... + b 와 같은 식이 됩니다. 그러나 우리는 개념 이해를 위해서 싱글 뉴런을 만들것이기 때문에 패스 합니다.


여기 까지가 정방향과 역방향이 합쳐져 만들어지는 뉴런의 정방향이 끝난것 입니다. 생각보다 쉽습니다. 뉴런에서 정방향은 어떤 결과를 얻기 위해 실험하는 과정이라고 보시면 됩니다.





반쪽짜리 싱글 뉴런을 가지고 테스트하기에 앞서서 결과 확인을 쉽게 하기 위해서 다음과 같은 함수를 추가해 주었습니다.


<script>

function _print(txt){

    document.write(txt+'<br>');

}


function ai(){

    this.w = 0; //가중치

    this.b = 0; //바이어스

    this.forward = function(x){


        y = x * this.w + this.b;

        

        return y;

    };

}


</script>

 

w와 b는 나머지 역방향을 거쳐서 계속해서 값이 변하게 됩니다. 그러나 우리는 아직 정방향만 개발하고 역방향은 개발하지 않았기 때문에 테스트에서는 임의의 숫자를 넣어줄 필요가 있습니다.



ai = new ai;

ai.w = 2.0;

ai.b = 1.0;

 



다음과 같이 테스트 합니다.



ai = new ai;

ai.w = 2.0;

ai.b = 1.0;


_print(ai.forward(1.0));

_print(ai.forward(2.0));

_print(ai.forward(3.0));

 

x(입력)로 1.0, 2.0, 3.0을 넣었을때를 예를 들어 작성하면 y(출력)이 어떻게 나오는지 확인해 보겠습니다.



3,5,7은 분명 우리가 원하는 0.62와 값이 일치하지 않습니다. 인간으로 치면 시행착오를 겪은 것 입니다.


그래서 다음 시간에는 정방향에서 발생한 시행착오를 가지고 인공지능이 학습 할 수 있도록 해보겠습니다.





copyright ⓒ 2017. 워크식스