뉴런의 편향(bias)에 대한 또 다른 시각

2022.01.30 09:01 2,185 Views

안녕하세요.

데이콘에서 활동중인 '동화책'입니다. 🤓📚

오늘은 심층신경망을 공부하다가 알게된, 나름 재밌었던(?) 내용을 정리해볼까합니다. 

바로 '뉴런의 편향(bias)에 대한 또 다른 시각'인데요.

그냥 수학적인 의미로만 알고 있던 편향이 real world 데이터를 학습할 때 어떤 의미를 내포하는지 간단하게 적어보려고 합니다. 

편향에 대한 자료를 찾다가 개략적인 내용들만 나와서 자세한 정보를 얻는데 실패했는데요...

오늘 제가 정리한 내용에 더 도움이 될 만한 자료가 있다면 공유 부탁드립니다!



1) 수학적인 의미

스케일이 서로 다른 데이터에 스케일러를 적용하듯이 편향 역시 뉴런에 입력되는 값들의 높이(?)를 맞춰주기 위한 변수라고 이해하고 있었습니다.

수학적으로 더 다가가보면 b(혹은 좌표평면에서 y절편)라는 변수를 하나 추가해서 활성화 함수에 입력되는 값의 범위를 늘려주는 것이죠.

더 넓은 범위의 입력을 받아들일 수 있는 더 유연한(flexible) 함수를 만든다고 생각했습니다.  

말이 조금 어려운데 이를 잘 설명해놓은 자료가 있어서 차근히 따라가보겠습니다. 


 "What's the Role of Weights and Bias in a Neural Network" [링크]


그림 〈1〉은 하나의 뉴런에 데이터가 입력되고 출력값이 나오는 과정을 도식화하고 있습니다.

x1~ xn에 해당하는 입력을 받아서 가중치 W을 곱하고 b라는 bias를 더해 활성화 함수에 입력하여 최종 예측 y를 얻게 됩니다. 

그림 1 [출처 : towardsdatascience]


편향에 앞서 가중치(weights)의 의미를 살펴보겠습니다.

설명을 위해 입력이 오직 두 값 x1, x2이고 이중 분류(0 또는 1을 예측값으로)를 수행하고 있는 간단한 모델을 가정해보겠습니다. (그림 〈2〉)


그림 2 [출처 : towardsdatascience]

만약 가중치가 없다면 활성화 함수의 입력은 (x1 + x2 + b)이고 이 값이 0보다 크면 1, 그렇지 않으면 0이라고 분류할 것입니다.

이를 수식으로 표현하면 다음과 같습니다. 

y_pred = 1 if x1 + x2 + b > 0 

        0 otherwise

따라서 그림 〈3〉과 같이 (x1, x2) 평면에 흩뿌려져 있는 데이터를 분류하기에는 (아무리 b 혹은 y절편을 변형한다고 하더라도) 기울기가 -1인 직선으로 밖에 표현할 수 없습니다.

이렇게 되면 데이터를 잘 분류할 수 없게 됩니다. 따라서 기울기를 자유롭게 움직일 수 있는 w1과 w2라는 가중치가 필요합니다.

다시 말해 가중치가 없는 상황에서는 x2 = - x1 + b 로 밖에 표현할 수 없었던 분류기를 전체 공간을 점유하는 x2 = a * x1 + b라는 함수로 표현할 수 있게 됩니다.


그림 3 [출처 : towardsdatascience]

한번쯤 들어보셨을 수 있지만 저 개인적으로는 가중치가 없는 상황을 생각해본 적이 없었는데 이해도 잘되고 직관적인 예시라서 설명해보았습니다.


다음은 편향(bias)입니다. 

해당 글에서 저자는 "편향은 활성화 함수를 좌우로 움직일 수 있게 한다"고 말합니다. 이를 시각적으로 표현하고 있습니다. 

활성화 함수를 시그모이드라고 가정해보겠습니다. 그렇다면 시그모이드를 거친 출력값은 다음과 같습니다. 

sigmoid output = 1/ (1 + exp(-w*x + b))

만약 b를 0으로 고정시킨 후 w를 변화시키면 그림 〈4〉와 같습니다. 파란색은 w = 0.3, 0.5, 0.7일 때를 각각 파란색, 주황색, 초록색으로 나타내고 있습니다. 

서로 다른 w으로 계산해도 시그모이드 함수의 중심은 0이라는 것을 바꿀수는 없습니다. 그렇다면 어떤 문제가 생길까요?

예를 들어 우리가 5라고 하는 입력에 대해 0이라는 출력을 보내고 싶어도 그렇게 할 수 없습니다.

이미지에 고양이가 있는지 없는지를 분류하는 네트워크에서 고양이가 없는 이미지들이 뉴런에 입력되는 값들이 5 근방인데 이를 0으로 출력할 수 없어서 1으로만 출력된다면 문제가 발생하겠죠?

네트워크는 고양이가 있는지, 없는지를 제대로 예측할 수 없게 됩니다.


그림 4 [출처 : towardsdatascience]

이 때 필요한 것이 편향(bias)입니다. 저자는 입력에 편향 항 b를 추가하고 값을 변화시키며 다양한 시그모이드 함수를 구현해보이고 있습니다.

그림 〈5〉에서 w=0.5로 고정시키고 b = -1, -5, 1, 5일 때를 각각 빨간색, 초록색, 파란색, 주황색 선으로 나타내고 있습니다. 

그림 5 [출처 : towardsdatascience]

여기까지 간단한 예시와 함께 수학적으로 바라본 가중치와 편향의 의미였습니다.

더 궁금하신 분들은 해당 게시물을 읽어보시기를 추천드립니다. 


2) 또 다른 시각

다음은 편향이 real world 데이터에 적용될 때 내포하는 의미입니다. 

결론부터 말하자면 '분류 문제에서 편향 값은 불균일한 데이터셋에 의해 영향'을 받습니다.


그림 〈6〉에서와 같이 다중 분류 문제를 예로 들어보겠습니다. 미리 학습된 W와 b를 필터 형태로 나타낸 예시입니다.

2x2 크기의 이미지의 픽셀 값이 가중치 W과 곱해지고 편항 b와 더해져 최종 score를 산출해내고 있습니다.

이 score는 입력한 이미지가 어떤 분류에 속하는지 참고할 수 있는 값이 됩니다. 

고양이 이미지를 넣었을 때 Score가 가장 큰 보라색의 필터가 고양이를 분류하는 필터라고 보시면 되겠습니다.

나머지 주황색과 초록색 필터는 다른 클래스(예. 자동차, 개구리 등)를 탐지하는 필터일 것 입니다. 

그림 6


만약 네트워크가 훈련하는 데이터 속에 클래스에 따른 불균형이 존재한다면 가장 빈도가 많이 나오는 클래스로 높은 확률로 예측하는 것이 네트워크의 성능면에서 좋아질 수 있습니다. 즉 훈련 데이터에 고양이 사진이 많다면 고양이 필터에 해당하는 편향을 높게 설정하면 될 것이고 그렇게 되면 어떤 데이터를 넣어더라고 고양이로 분류할 확률이 높아집니다. 


반면에 훈련 데이터에 적게 분포하는 다른 클래스들 (예. 자동차, 배)는 그러면 안됩니다. 편향 값을 낮게 설정 해야만 이 패널티를 뛰어넘는 W*x 값이 나와야만 해당 클래스로 예측하게 됩니다. 즉 입력 이미지가 희소 클래스의 패턴과 훨씬 잘 매칭이 되어야 해당 클래스로 분류할 확률이 높아집니다. 이러한 의미에서 편향 값은 훈련 데이터의 불균형성을 일부 반영된 것으로 보입니다.


대량의 데이터를 학습한 네트워크의 편향 값은 prior knowledge, 즉 세상에 존재하는 보편성과 특수성을 내포하고 있다고 말할 수 있습니다. 하지만 이것을 원치 않을 때는 희소한 데이터의 증폭(Data Augmentation) 등의 방식을 통해서 보정을 할 수 있습니다. 예를 들어 CT 사진을 보고 암을 진단하는 모델이 있다고 가정해 봅시다. 이 모델이 학습하는 데이터에는 암인 환자의 데이터보다 암이 아닌 환자의 데이터가 더 많이 포함되어 있을 것 입니다. 모델의 입장에서는 어떠한 데이터를 입력하더라도 '암이 아니다'라고 진단하는 것이 좋을 수 있으나 이 모델을 만든 이유에 부합하지 않습니다. 따라서 암 환자의 데이터를 증폭시켜서 모델이 학습하도록 수행하기도 합니다. 이를 통해 편향값을 수정할 수도 있겠네요.


마무리

오늘은 뉴런의 편향(bias)에 대한 이야기를 정리해보았습니다. 

두번째로 설명드린 편향의 새로운 시각은 다소 생소하지만 동시에 흥미로운 이야기였던 것 같습니다. 

더 궁금하신 내용 및 피드백, 더 공유한 정보들이 있으시면 언제나 편하게 댓글 부탁드립니다.

긴 글 읽어주셔서 감사합니다.