SW/인공지능

인공지능 : 머신러닝(신경망)의 원리

얇은생각 2019. 5. 23. 07:30
반응형

인공지능 : 머신러닝(신경망)의 원리



신경망의 작동 원리

이제 신경망의 기본 구조가 어떻게 생겼는지 아이디어를 얻었으니, 어떻게 작동하는지 설명하겠습니다. 그렇게 위해서, 네트워크에 포함할 수 있는 다양한 종류의 뉴런을 설명할 필요가 있습니다.


뉴런의 첫번째 유형은 Perceptron입니다. 비록 오늘날 쇠퇴했지만, 어떻게 작동하는지 이해하는 것은  더 현대적인 뉴런들이 어떻게 기능하는지에 대한 좋은 단서를 줄 것입니다.


Perceptron은 이항 변수의 벡터를 단일 이항 출력에 매핑하여 이항 분류기를 학습하는 기능을 사용하고 supervised 학습에도 사용할 수 있습니다. 이러한 맥락에서 Perceptron은 다음 단계를 따릅니다.


1. 모든 인풋에 weight를 곱하고, 해당 인풋이 아웃풋에 얼마나 중요한지 나타내는 실제 숫자를 곱합니다.

2. weighted sum이라고 불리는 이것들을 함께 추가합니다: ∑ wj xj,

3. 활성화 함수를 적용하여 weight sum가 임계값보다 큰지 여부를 결정하고, 여기서 threshold value는 바이어스와 동일하며, 1 이하를 할당하고 0을 출력으로 할당합니다.


또한 다음과 같은 용어로 Perceptron 기능을 쓸 수 있습니다.


인공지능 : 머신러닝(신경망)의 원리


참고: b는 bias이며 -threshold와 동일하며, w.x는 w의 변수이며, 구성 요소는 weight이고, x는 인풋으로 구성된 벡터입니다.


이 알고리즘의 가장 강력한 점 중 하나는 우리가 weight와 bias을 변화시켜 의사 결정의 뚜렷한 모델을 얻을 수 있다는 것입니다. 이러한 입력에 더 많은 weight를 할당하여 양수이면 원하는 출력에 유리하도록 할 수 있습니다. 또한 바이어스는 1을 출력하는 것이 얼마나 어렵거나 쉬운지를 나타내는 척도로 이해될 수 있기 때문에 원하는 출력이 발생할 가능성이 더 많거나 적기를 원할 경우 값을 떨어뜨리거나 올릴 수 있습니다. 공식에 주의를 기울이면 큰 양의 편향은 1을 매우 쉽게 출력할 수 있지만, 매우 부정적인 편향이 있으면 출력 1의 작업이 매우 가능성이 낮다는 것을 관찰할 수 있습니다.


그 결과, perceptron은 다양한 증거나 데이터를 분석하고 정해진 선호도에 따라 결정을 내릴 수 있습니다. 사실, 모든 계층이 이전 계층의 출력을 취하여 weight를 부여하고 더 복잡한 결정을 내리는 더 많은 지각 층을 포함하는 더 복잡한 네트워크를 만드는 것이 가능합니다.


만약 지각이 복잡한 결정을 하는데 좋은 역할을 한다면, 왜 다른 종류의 뉴런이 필요할까요? Perceptron를 포함하는 네트워크의 단점 중 하나는, 하나의 지각변동에서도, weight이나 bias의 작은 변화가 산출물을 0에서 1로 또는 그 반대로 심각하게 변화시킬 수 있다는 것입니다. 정말로 원하는 것은 weight이나 bias를 약간 수정함으로써 네트워크의 행동을 점진적으로 변화시킬 수 있는 것입니다. 요즘에는 현대적인 형태의 뉴런이 유용하게 사용되고 있습니다. S자형 뉴런. S자형 뉴런과 perceptron의 주요한 차이점은 입력과 출력이 0과 1 사이의 어떤 연속적인 값이 될 수 있다는 것입니다. 출력은 가중치, w 및 바이어스 b를 고려한 입력에 S자형 함수를 적용한 후 얻습니다. 시각화를 더 잘 하기 위해 다음과 같이 쓸 수 있습니다.


인공지능 : 머신러닝(신경망)의 원리



따라서 출력의 공식은 다음과 같습니다.


인공지능 : 머신러닝(신경망)의 원리

이 함수에 대한 수학적 분석을 수행하면 아래와 같이 함수 σ 의 그래프를 만들 수 있으며, z가 크고 양일 때 함수는 최대치 1에 도달하지만 z가 크고 음일 경우 함수는 최소 항암치 0에 도달한다고 결론을 내릴 수 있습니다. 여기서 sigmoid 함수는 z의 중간 값을 가지고 있기 때문에 이 함수가 부드럽고 선형 형태에 가깝게 되는 것입니다. 이 간격에서 가중치(Δwj) 또는 바이어스(Δbj)의 작은 변경은 출력에 작은 변화를 생성합니다. 이는 Perceptron의 개선을 위한 동작입니다.


함수의 파생은 변수 x의 변경에 대한 값 y의 변화율의 측정치라는 것을 알고 있습니다. 이 경우 변수 y는 출력이고 변수 x는 weight와 bias의 함수입니다. 이를 활용하여 파생, 특히 부분파생(w와 b에 관한 부분파생)을 사용하여 출력의 변화를 계산할 수 있습니다. S자형 함수의 경우 파생 모델이 감소하여 계산할 수 있습니다: f(z)*(1-f(z)).


네트워크의 모든 뉴런의 기능을 설명했지만, 이제, 나머지 뉴런들이 어떻게 작동하는지 살펴볼 수 있습니다. 한 층의 출력이 다음 층의 입력으로 사용되는 신경망을 피드포워드(feedforward)라고 하는데, 특히 루프가 개입되지 않고 정보가 앞으로만 전달되고 다시는 되돌아가지 않기 때문입니다.


3단계의 신경망을 사용한다고 가정해봅시다. 여기서 S자형 뉴런을 사용해서 특정한 특징을 예측합니다. 신경망의 구조에 대해 설명하면, 우선 한 층의 뉴런과 다음 층의 연결에 weight와 bias이 할당될 필요가 있습니다. 일반적으로 bias과 weight는 모두 시냅시스 행렬에서 랜덤하게 초기화됩니다. Python에서 신경 네트워크를 코딩하는 경우 Numpy 함수 np.random을 사용하여 가우스 분포를 생성할 수 있습니다(여기서 평균은 0과 같고 표준 편차는 1과 동일함).


그 후에 Feedforward 단계부터 시작하여 예측된 출력을 계산하는 신경 네트워크를 구축할 수 있습니다. 다시 말해, 네트워크에 관련된 여러 계층을 구축하기만 하면 됩니다.


지금까지, 우리는 신경망의 기본 구조에 대해 알아보았습니다. 뉴런들 사이의 연결의 weight과 bias, S자형 기능 등에 층들이 있습니다. 하지만 이 중 어느 것도 신경 네트워크가 어떻게 데이터 세트의 패턴을 예측하는 데 좋은 역할을 할 수 있는지 설명해 주지 못합니다.

반응형