반응형

 


인공 신경망과 딥러닝

 

인공 지능(AI)이 이제 미래다.

그래서 인공 지능은 어떻게 무엇을 공부해야 하는지 찾아봤다.

딥러닝(DeepLearning), 머신러닝(MachineLearning) 등 용어가 자주 등장한다.

딥러닝을 시작으로 책도 보고 검색도 해봤다.

용어도 어렵고 복잡한 수식을 보면 그냥 책을 덮고 싶었다.

그래도 27년 차 개발자로 살아온 경력이 있는데 쉽게 포기할 순 없다.

전문가처럼 어려운 말이 아닌 내가 이해한 대로 쉽게 이야기해보려고 한다.

 

딥러닝을 공부하면 인공 신경망이란 용어를 만난다.

우리 뇌의 뉴런을 컴퓨터를 이용해 비슷하게 만든 것이 인공 신경망이라고 한다.

딥러닝에 있어 인공 신경망이란?

 

사칙연산

 

예를 들어,

깊이 있는 고등 수학 공부를 한다면 사칙연산은 기본으로 알아야 하는 것과 비슷하다.

딥러닝을 공부하기 위해서는 인공 신경망을 알아야 한다는 의미다.

인공 신경망으로 깊이 학습하는 구조를 만드는 것이 딥러닝(DeepLearning)이다.

아이고 어려운 용어만 난무한 내용이었다.

 

뉴런과 인공 신경망

 

앞서 이야기 한 것처럼 인공 신경망은 뉴런을 기초해서 만들었다고 했다.

 

뉴런 구조

 

이미지를 보자.

왼쪽 세포체에 붙어 있는 수상돌기에서 신호를 받는다.

이 신호는 뉴런 몸통을 통과해서 오른쪽 끝의 축삭말단에서 결과가 나온다.

그 결과 신호는 다시 다른 뉴런의 수상돌기에 보낸다고 한다.

그렇다면 입력 받는 신호, 즉 입력 신호는 무엇인가?

우리는 신호를 오감으로 생각하면 쉽게 이해가 된다.

오감이라면 시각, 미각, 후각, 청각 그리고 촉각이 있다.

사과(시각), 향이 좋아(후각), 맛있어(미각), 부드럽네(촉각), 사각사각소리(청각).

이 모든 것은 외부에서 감각을 받아들이는 눈, 코, 입 등 신체를 통해 뇌에 전달된다고 한다.

그래서 우리는 전달된 정보를 기반으로 사과라는 것을 안다. (인지)

 

오감

 

어떻게 알까?

과거의 기억을 바탕으로 현재 들어온

즉, 뉴런의 수상돌기를 통해 들어온 정보와 비교해서 인지하게 된단다.

외부의 자극(빛, 통증 등)을 전기적 신호로 변환해서 뉴런들을 통과하게 된다고 한다.

기존 기억으로 저장된 정보와 비교해서 가장 가능성 있는 정보를 인지해서 결과를 준다고 한다.

그래서 사과를 보면 사과라고 인지하게 되는 것이다.

반면, 사과를 처음 본 사람은 사과에 대한 기억(정보)이 없다.

그래서 복숭아, 배와 비슷한 형태로 과일이라는 추측만 하게 된다.

그 이유는 사과에 대한 정보가 부족했기 때문일거다.

뉴런에 대해 이야기했으니 이제 인공 신경망 이야기를 해보자.

컴퓨터 센서를 통해 값(정보)을 전달받는다.

이 값이 어떤 의미를 갖는지 판단(분류) 한 후 가장 어울리는 값을 돌려준다.

뉴런과 원리가 엄청 비슷하다는 것을 눈치챘는가?

 

사과

 

이때 입력값(정보)에서 특징을 정확히 분류해서 저장해 둔다.

사과에 대한 다양한 정보(색, 크기, 껍질 등)를 기반으로 스무고개 하듯 입력값을 분류한다.

그렇게 취합해서 최종 결과가 사과인지 판단한다.

이런 흐름으로 구성한 것을 인공 신경망이라 한다.

스무고개 질문을 다시 보면 특징(모양, 크기, 색상 등)을 확인해서 분류하는 과정이다.

몇 개가 될 수도 있고 좀 더 세밀하게 분류한다면 수 십 개가 될 수도 있다.

이렇게 깊이 있게 특징들에 대해 구분해서 학습하는 것, 바로 딥러닝(DeepLearning)이다.

즉, 깊이 있는 특징(질문)들은 입력받은 다양한 사과 사진을 보고 특징을 정리한다.

그러면 프로그램에서 알아서 질문(특징)들을 만들어 스무고개를 완성한다고 한다. (꼭 20개는 아니다)

 

분류와 가중치

 

인공 신경망은 뉴런을 보고 만들었다고 한다.

뉴런의 역할은 무엇인가?

뉴런을 기초로 한 인공 신경망은 도대체 뭘 하는 건가?

인공지능에서 인공 신경망은 왜 필요한가?

 

바로 분류를 하기 위해 존재하고 필요하다고 생각한다.

분류? 분류라면...

이것은 사과인가? 배인가?

이것은 초코파이인가? 오예스인가?

이것이 분류다.

바로 우리 뇌는 뉴런이 인공 지능에서는 인공 신경망이 그 일을 한다고 한다.

분류를 할 때 더 높은 가능성에 점수를 줘야 한다.

바로 가중치라고 한다.

특징을 보니 네모만 초콜릿과자니까 오예스에 더 가깝다는 결론에 도달한다.

 

인공 신경망, 딥러닝(DeepLearning)

 

예를 들어,

시각적으로 초콜릿으로 덮인 과자가 정보가 들어온다.

모양이 네모라서 가중치를 많이 줬다.

네모 초콜릿 과자라 가중치를 더 받았고 그 값이 커서 오예스로 분류했다.

 

마무리

 

인공 신경망을 배우기 위해 뉴런의 특징에 대해서도 알아봤다.

신호(값)를 입력받으면 내부 정보(특징)를 활용해서 무엇인지 분류한다.

판단 근거에 대한 정확도를 높이기 위해 더 많고 심도 있는 분류 조건이 필요하다.

즉, 더 많은 정보가 필요하다는 의미다.

깊은 학습, 바로 딥러닝(DeepLearning)을 통해 정확도를 높이게 된다.

우선 인공 신경망, 딥러닝, 가중치, 뉴런 등 용어가 더 친숙해졌다.

  • 뉴런 신호 전달에서 시작으로
  • 인공 신경망 구조를 알고
  • 가중치(점수)를 어떻게 활용하는지
  • 딥러닝, 깊이 있는 학습의 개념을 이해하게 되었다.

그렇다면 성공이다.

궁금하거나 잘못된 정보가 있다면 댓글에 알려주기 바란다.

반응형
반응형

손실함수 분류 문제

손실 함수에서 분류 문제의 대표인 교차 엔트로피에 대해 알아본다.

 

 

이전 포스팅에서 회귀 문제에 대해 알아봤다.

과거의 정보를 활용해서 결과를 예측하는 방식이 회귀다.

과거 정보(입력값)에 따라 결과가 결정(종속적)된다.

2025.05.14 - [인공지능(AI)/딥러닝(DeepLearning)] - 쉽게 풀어 쓴 딥러닝 손실함수 1 : 회귀 문제에서 오차제곱합(SSE), 평균제곱오차(MSE) 코딩하기.

 

쉽게 풀어 쓴 딥러닝 손실함수 1 : 회귀 문제에서 오차제곱합(SSE), 평균제곱오차(MSE) 코딩하기.

딥러닝(Deeplearning)에서 손실 함수란?딥러닝 스터디 중 손실 함수(loss function)를 알게 되었다.머신러닝, 딥러닝에서 해당 모델의 성능을 평가할 사용하는 함수다.모델이 예측, 인식한 값과 실제 값

tiboy.tistory.com

 

분류 문제

회귀가 정보를 입력받고 예측(주가, 집값 등)하는 문제라면,

분류는 고체나 액체 같은 종류, 개와 고양이 같은 문제다.

 

분류 문제에 사용하는 대표적인 손실 함수가 교차 엔트로피다. (cross entropy loss)

교차 엔트로피는 다양한 식을 가지고 있다.

예측한 값과 실제 값의 오차를 수치로 결과를 보여준다.

손실 함수는 결국 이 오차를 최소화하기 위해 사용되는 함수다.

이진 교차 엔트로피(Binary Cross Entropy, BCE)

둘 중 하나로 분류하는 경우 사용한다.

예를 들어,

합격과 불합격, 정상과 실패 등으로 시그모이드 활성화 함수를 사용하면 0과 1로 결과가 나오게 된다.

이진 교차 엔트로피 수식

엄청 복잡한 식이 나타났다.

딥러닝 공부 중 이런 식 때문에 어려움을 겪을 수 있을 거라 생각한다.

분리해서 같이 하나씩 살펴보면 별거 아니다. 걱정은 이제 그만!

∑는 밑의 i=1부터 N까지 1씩 증가해서 옆의 식에 대입 후 합산한다는 SUM을 의미한다.

아래 예제를 보면 i는 1부터 3까지 순서대로 시그마 옆 i에 대입하고 더한다.

시그마 원리

시그마는 주어진 범위의 값을 하나씩 넣고 그 모든 값을 SUM 한다.

이제 시그마 뒤의 식을 보자.

y는 정답(0 또는 1)이 들어온다.

y가 0이면 앞의 식은 0이 되고 뒤의 식은 살아남고,

y가 1이면 뒤의 식은 0이 되고 앞의 식은 살아남는다.  (0 × log() = 0 이므로)

log는 계산기 또는 파이썬 넘파이(numpy)에서 계산하면 된다.

파이썬 numpy로 log 계산

만약 y에 1(정답)이 들어오면 0이 되고 log와 곱하면 0이 되고 식은 사라진다.

y가 0(오답) 일 때 log 식 내 꺽쇠 y값(0~1 사이값)으로 계산된다.

샘플 데이터로 계산해 보자.

정답값 y = [0, 1]

신경망 출력 y(꺽쇠) = [0.2, 0.8]

교차 엔트로피 수식 : 1일 확률 0.8인 경우 0.22314...

위 값을 대입해서 직접 풀어봤다.

손실 함수 교차 엔트로피 결과는 0.22314가 나왔다.

신경망 출력 y(꺽쇠) = [0.3, 0.7]라면?

1일 확률이 앞 식보다 0.1 작은 0.7로 설정했다.

교차 엔트로피 수식 : 1일 확률 0.7인 경우 0.35667...

신경망 결과 1일 확률이 더 낮게 나오면 식의 결과 값은 더 크게 나온다.

1일 확률이 0.8일 때 0.22314가 나왔는데 0.7로 낮아지면 0.35667이 나왔다.

즉, 정답일 확률이 높을수록 교차 엔트로피 식의 값은 작아진다.

이제 이 식을 파이썬으로 구현해서 딥러닝에서 활용해 보자.

import numpy as np

def cross_entropy_error(y, k):
    dt = 1e-8   # log(0)은 무한이다. 이를 방지하기 위해 필요
    return -np.sum(k * np.log(y + dt))


k = [0, 1]  #정답
y = [0.2, 0.8]  #신경망 결과

print(cross_entropy_error(np.array(y), np.array(k)))
#결과 : 0.2231435388142097

y = [0.3, 0.7]

print(cross_entropy_error(np.array(y), np.array(k)))
#결과 : 0.35667492965301817

값의 범위가 0~1인데 dt(1e-8)는 log(0)이 안되게 하기 위해 넣었다.

log(0)은 무한대로 계산 오류가 나기 때문이다.

파이썬 코드도 손으로 푼 결과와 같다.

정리

신경망 학습 중 손실함수에 대해 알아봤다.

딥러닝 개발자로 공부하다 보면 나타나는 복잡한 식으로 당황할 수 있다.

이 포스팅을 보고 계산에 도움이 되길 바란다.

인공지능 개발자를 위해~

끝.

반응형