반응형

딥러닝을 공부하면서 이해하기 어려운 부분이 나온다.

나를 위해 정리해 봤다. 

같은 공부를 하는 독자가 있다면 조금이나마 도움이 되길 바란다.

시작해 보자.

 

신경망이란?

신경망(Neural Network)은 무엇일까?

영화 터미네이터 2: 심판의 날을 보면 주인공 아놀드 슈왈제네거가 인조인간 역을 맡아 멋진 오토바이를 타고 활약한다.

인조인간 T-800은 존 커너를 제거하러 온 T-1000(액체형 인조인간)을 피하고 미래를 바꾸기 위해 노력한다.

이때 존 커너는 도망 다니면서 인간들의 방식을 T-800에게 교육한다.

몇 번의 반복 학습을 통해 T-800은 인간과 유사한 감정 표현과 행동을 하게 되고 그런 장면에서 웃었던 기억이 있다.

바로 오늘 공부할 신경망을 통해 훈련이 이뤄졌다고 본다.

존 코너에게 정보를 입력받고 T-800 내부 프로세스에서 학습 후 적절한 상황이 되면 출력하는 구조다.

입력층(존 커너 정보 받음) - 은닉층(T-800 내부 프로세스) - 출력층(T-800 말과 행동)

존 커너(입력층, 밖)는 T-800(은닉층, 프로세스)가 어떻게 받아들이는지 모른다.

그래서 은닉이라는 용어를 쓴다.

이처럼 신경망은 인간의 두뇌와 유사한 방식으로 데이터를 처리하고 결정할 수 있도록 컴퓨터를 교육 시킨다.

바로 머신러닝과 딥러닝 프로세스의 일종이다.

파이썬(Ptyhon) 코드로 직접 만들고 그래프를 출력해서 쉽게 이해해 보자.

 

퍼셉트론 활성화 함수인 계단 함수 특징

퍼셉트론을 되새겨 보자.

퍼셉트론도 인공 신경망 중 하나다.

2024.11.19 - [인공지능(AI)/딥러닝(DeepLearning)] - [딥러닝]퍼셉트론(Perceptron)이란? 초보 인공지능(AI) 개발자를 위한 쉬운 설명, 퍼셉트론 뜻

 

[딥러닝]퍼셉트론(Perceptron)이란? 초보 인공지능(AI) 개발자를 위한 쉬운 설명, 퍼셉트론 뜻

인공지능(AI) 프로그래머가 되고 싶다.처음 보는 단어가 많다.하나씩 정리해 본다.인공지능(AI) 개발자의 필수 공부 딥러닝(DeepLearning) 그리고 퍼셉트론(Perceptron)인공지능(AI) 개발자가 되기 위해서

tiboy.tistory.com

여러 개의 입력값을 받아 하나의 출력 신호를 내보내는 오래된 알고리즘이라 했다.

퍼셉트론은 가중치와 편향이 있고 두 개의 값에 의해 출력 신호가 제어된다.

그 수식은 다음과 같다.

퍼셉트론 (Perceptron) 수식

위 식의 구조는 다음과 같이 그릴 수 있다.

편향:1, 가중치:w1w2, 입력:x1x2, 출력:y

퍼셉트론의 활성화 함수는 계단 함수다.

파이썬(Python), numpy 그리고 matplotlib.pylab를 이용해서 계단 함수 그래프를 구현해 보자.

코드 내 "#" 뒤의 내용은 주석이니 참고하자.

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np     
import matplotlib.pylab as plb
 
def step_func(x):
    return np.array(x > 0, dtype=np.int32) # x가 0보다 크면 true(1), 같거나 작으면 false(0)
 
= np.arange(-3.03.00.001# -3에서 3 전까지 0.001 간격 넘파이 배열 생성  -3.0 ~ 2.9
= step_func(x)
 
plb.plot(x, y) # x, y 값 대입
plb.ylim(-0.11.1# y값(축) 범위 지정
plb.show() # 그래프 실행
cs

 

퍼셉트론 활성화 함수인 계단 함수

return 식을 보자.

return np.array(x > 0, dtype=np.int32)

np.array에서 x가 0보다 크면 true(1), 아니면 (0과 같거나 작으면, false(0))을 출력한다.

0과 1이 출력값이 되므로 계단 함수가 나오게 된다.

퍼셉트론처럼 기준점(가중치, 임계값을 적용해서)을 사이에 두고 0 또는 1 값만 표현된다.

신경망에서 활성화 함수인 시그모이드 함수(Sigmoid)

퍼셉트론에서 활성화 함수는 계단 함수임을 알았다.

좀 더 발전된 활성화 함수는 시그모이드(Sigmoid) 함수다.

시그모이드는 S 자 형태라는 의미다.

그래프가 S자 모양으로 나온다.

시그모이드 함수와 계단 함수를 파이썬(Python)으로 구현하고 그래프를 비교해 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import numpy as np    
import matplotlib.pylab as plb
 
# 계단함수
def step_func(x):
    return np.array(x > 0, dtype=np.int32)
 
#시그모이드 함수
def sigmoid_func(x):
    return 1/(1+np.exp(-x))
 
= np.arange(-5.05.00.001)  
= step_func(x)
= np.arange(-5.05.00.001)  
= sigmoid_func(a)
 
plb.plot(x, y, a, b)
plb.ylim(-0.11.1)
plb.show()
cs

랑:계단 함수, 주황:시그모이드 함수

주황색 선이 시그모이드(Sigmoid) 함수다.

S 자 모양이다.

파란색 계단 함수와 다르지만 0과 1 사이에 있다.

계단 함수는 0과 1이 경계에서 갈라지지만 시그모이드 함수는 0.73, 0.88처럼 실수 값이 나와 곡선이 된다.

 

시그모이드(Sigmoid) 함수 계산 방법

계단 함수와 시그모이드 함수를 파이썬(Python)으로 코딩해 봤고 그래프도 그려봤다.

계단 함수는 0을 기준으로 조건을 걸어 true(1) 또는 false(0)으로 결과를 출력했다.

특별한 수식이 아닌 조건식이다.

반면, 시그모이드 함수식을 보자.

return 1/(1+np.exp(-x))

exp(-x)라는 생소한 함수가 보이고 분수식으로 되어 있다.

수학식으로 어떻게 계산하는지 보자.

함수 f(x) 식으로 구현해 보겠다.

exp()는 파이썬에서 사용하는 지수 계산 함수다.

수학식으로 바꾸면 다음과 같다.

우측항의 e는 자연 상수다.

수학에서 자연 상수 e는 매우 중요하게 사용된다.

자연 상수에 대한 이야기는 이 정도만 설명하겠다.

이제 위 공식과 값을 이용해서 시그모이드 식에 대입하고 실제 값을 계산해 보자.

위 함수 f(x)에서 exp 부분을 수식으로 바꾼다.

이 exp() 변환식을 시그모이드에 적용하자.

수학에서 지수 공식을 활용하자.

a가 0이 아니고 양의 정수라면 다음과 같다.

지수 공식에서 2번을 활용하면 되겠다.

시그모이드 함수 f(x)에 x = 1을 대입해 보자.

자연상수 e를 대입하자.

0.3679...가 나왔는데 소수점 4자리만 사용해서 다시 대입하자.

결과가 나왔다.

시그모이드 함수 f(1) = 0.713이다.

x = 5로 f(5)는 어떤 값이 나올까?

수학의 지수 법칙을 이용해 어렵지 않게 직접 풀어보았다.

0과 1만 출력하는 계단 함수와 다르게 시그모이드 함수는 실수형 값을 출력해서 부드러운 S 자형 곡선을 만들 수 있다.

렐루(ReLU, Rectified Linear Unit) 함수는 뭐지?

다 끝난 줄 알았는데 시그모이드 이후 더 많이 사용한다는 ReLU 함수가 있단다.

세 가지 함수를 같이 적용해서 파이썬(Python)으로 코딩하고 그래프를 확인하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import numpy as np    
import matplotlib.pylab as plb
 
#계단 함수
def step_func(x):
    return np.array(x > 0, dtype=np.int32)
 
#시그모이드 함수수
def sigmoid_func(x):
    return 1/(1+np.exp(-x))
 
#ReLU 함수
def relu_func(x):
    return np.maximum(0, x)
 
= np.arange(-5.05.00.001)  
= step_func(x)
= np.arange(-5.05.00.001)  
= sigmoid_func(a)
= np.arange(-5.05.00.1)
= relu_func(c)
 
plb.plot(x, y, a, b, c, d)
plb.ylim(-0.15.1)
plb.show()
 
cs

초록:ReLU 함수다. 이해를 돕기 위해 y축을 5로 정했다.

ReLU 함수의 return 값을 보자.

return np.maximum(0, x)

numpy의 maximum 함수를 사용했다.

maximum은 입력받은 두 값 중 큰 값을 출력한다.

np.maximum(0, x)는 x값이 0보다 크면 x값 그대로 출력하고 0과 같거나 작으면 0만 출력한다.

그래서 그래프가 0보다 같거나 작을 때는 0을 유지하다 0을 지나면서 x=y 형태의 그래프가 그려지게 된다.

 

신경망의 활성화 함수의 공통점

각각 다른 계산식을 가진 신경망 활성화 함수다.

또한 비선형 그래프인 점이 같다.

 

정리해 보자

딥러닝을 공부하면서 퍼셉트론을 시작으로 신경망까지 왔다.

활성화 함수인 계단 함수, 시그모이드 함수,  ReLU 함수까지 파이썬으로 코딩하고 그래프로 특징을 확인했다.

첫걸음을 뗀 것이다.

수학에서 나오는 지수 함수와 파이썬/numpy 내장 함수를 활용해서 활성화 함수들을 이해하게 되었다.

1. 계단 함수

입력값에 가중치와 편향을 적용해서 나온 값을 기준으로 조건식을 이용해서 true/false 값으로 1 또는 0을 출력한다.

2. 시그모이드(Sigmoid) 함수

자연 상수로 구현된 식을 활용해서 실수형 값을 출력한다.

좀 더 세밀하게 구성할 수 있다.

3. 렐루(ReLU) 함수

maximum 함수를 사용해 0보다 크면 x=y 형태를 구성하고 0과 같거나 작으면 0을 출력하게 한다.

 

점점 재미있어진다.

잘못된 부분이 있으면 댓글로 알려주세요.

끝.

반응형
반응형

키워드, 딥러닝, AI, 인공지능. 개발자, 프로그래머

25년을 개발자(프로그래머)로 살아왔다.

비주얼베이직으로 시작했고 델파이와 파워빌더로 다양한 산업군의 프로젝트에 참여했다.

2005년쯤 시대에 맞게 자바(java)로 전향했고 요즘은 자바스크립트에 빠져있다.

지금 시대는 인공지능(AI)을 활용한 프로그램들이 넘쳐나고 있다.

chatGPT는 개발자의 일자리까지 위협한다는 뉴스도 봤다.

일전에 파이썬을 공부하고 포스팅했고 마침 인공지능의 시작이라 할 수 있는 딥러닝을 접하게 되었다.

내 인공지능 이야기는 초등학교에서 시작되었다.

 

초등시절 컴퓨터

나는 초등학교 5학년 친구 집에서 실물 컴퓨터를 처음 봤다.

테이프레코더가 컴퓨터 옆에 있었다.

Chris Whytehead, Chris's Acorns – CC-BY-SA-3.0, CC BY-SA 3.0 <https://creativecommons.org/licenses/by-sa/3.0>, via Wikimedia Commons

위 사진과 비슷한 테이프를 사용하는 저장장치였다.
[출처. Chris Whytehead, Chris's Acorns – CC-BY-SA-3.0, CC BY-SA 3.
0
<https://creativecommons.org/licenses/by-sa/3.0>, via Wikimedia Commons]

지금 같은 인터넷 시대가 아니었기에 가정에서 초딩이 컴퓨터로 할 수 있는 것은 게임밖에 없었다.

엄마를 졸라서 컴퓨터 학원에 등록했다.

컴퓨터로 로봇이라도 만들 기세였다.

학원에 등록해서 BASIC을 배웠다.

강사샘이 알려준 대로 코딩을 했지만 오류도 많았고 독수리 타법으로 시간이 많이 걸렸다.

재미도 없고 지루했다.

for문, if문을 배웠는데 이걸로 뭘 만들 수 있을까? 라는 이해하기 어려운 상황이 되었다.

* 모양이 삼각형으로 나오게 출력하기....그래서 어쩌라고?

*
**
***
****

이걸로 어떻게 로봇을 만들지?

결국 한 달 다니고 그만두었다.

지금 생각해 보면 코딩 학원의 큰 문제점 중 하나가 이론만 가르치고 동기 부여는 없다는 것이다.

쉽게 확인하는 방법은 이론을 배워서 실습을 하고 난 뒤

그래서? 뭐 어쩌라고? 이걸로 뭐 하는 건데?

라는 생각이 드는 경우다.

 

컴맹 대학생 개발자로 첫 발

스타크래프트를 혼자 실행 못했던 컴맹 대학생이 나였다.

우연히 프로그램 사업을 하는 친구를 만났다.

팬티엄2에 64메가 램 그리고 6.4기가 하드디스면 최고 사양이었던 시절이었다.

html을 시작으로 홈페이지 개발자로 첫 발을 내디뎠다.

병아리 수준의 초초초짜 개발자였기에 C로 만든 cgi는 외계어로 보였다.

친구 사무실에 개발자들을 만났다.

VC++, 델파이 등으로 개발을 하는데 정말 멋져 보였다.

사진: Unsplash 의 Sigmund

나도 개발자(프로그래머)가 되겠다고 결심을 굳혔다.

그리고 일반선택으로 전산통계학과의 프로그래밍언어 강의를 신청했다.

수업을 듣는데 배열과 집합을 이용해서 프로그램을 하는 듯 보였다.

프로그래밍 언어는 Lisp이었다.

당시 트렌드도 아니고 내가 공부하는 언어와 너무 달랐다.

도대체 이런 이상한 프로그래밍 언어는 어디에 쓰는 거야?

찾아보니 인공지능에 활용한다고 한다. 헐~

 

인공지능(AI) 프로그래머로 첫 발

25년 동안 시대에 맞는 프로그램 기술을 배우고 현장에서 개발자로 살았다.

영화 속 인공지능인 터미네이터와 스카이넷을 보고 인공지능(AI) 개발자의 꿈은 유지되었다.

기회가 된다면 꼭 도전해보고 싶었다.

현실은 업무 프로그래머였지만...

어느 날 회사에서 도서 지원이 있다고 해서 인터넷 서점을 서칭 하다가 멋진 책을 발견했다.

사진: Unsplash 의 Growtika

딥러닝.

인공지능(AI)을 위한 기술이었다.

머신러닝, 딥러닝, 신경망

낯선 단어들이다.

하지만 인공지능(AI) 개발자라면 필수가 아닐까?

2019년 딥러닝 책을 시리즈로 구매했다.

앞에 몇 페이지를 보는데 파이썬(python)을 활용했다.

그래서 파이썬(python) 책도 구매했다.

우선 파이썬부터 시작했고 포스팅했다.

2020.09.28 - [Software/Python(파이썬)] - [HOW]파이썬(Python) 특징에 대해 알아봅니다. -왕초보 시작

 

[HOW]파이썬(Python) 특징에 대해 알아봅니다. -왕초보 시작

안녕하세요. 신기한 연구소입니다. 정말 오랜 시간 자바(JAVA) 개발자로 지내왔는데 새로운 공부가 하고 싶은 마음에 파이썬(Python)을 선택하게 되었네요. 마침 잠깐 쉬는 기간이라 딱 좋은 시기입

tiboy.tistory.com

 

2021년 이제는 인공지능(AI) 시대가 온 것 같다.

다양한 앱들이 나타나고 점점 확산되는 분위기였다.

파이썬도 익혔기에 책장에 묵혀 둔 딥러닝 책을 꺼냈다.

그리고 공부를 시작했다.

관심 분야라 재미있게 읽었다.

배열, 행렬 그리고 미분이 나온다.

딥러닝을 공부하는데 수학이 필요한 것이다.

다행히 대학 때 미적분을 배웠기에 어렵지 않게 읽었다.

프로젝트와 병행해서 공부를 했다.

그러던 어느 날 협력업체 직원과 대화를 했는데 인공지능(AI)에 대한 이야기가 나왔다.

요즘 딥러닝 공부 중이라 하니 개발자는 굳이 딥러닝 공부할 필요가 없다고 한다.

그 이유는 구글 등에서 나오는 API를 활용하면 되기 때문이란다.

굳이 수학도 나오는 어려운 딥러닝을 공부할 필요 없고 그것을 활용해서 만든 API만 잘 사용하면 된단다.

사진: Unsplash 의 Antoine Dautry

사실 틀린 말은 아니다.

사업하는 입장에서 사업적인 접근만 하면 되기 때문이다.

굳이 연구 개발하는 개발자 기준으로 어렵게 공부할 필요는 없을 수 있다.

 

제대로 다시 딥러닝 시작하기

나는 개발자다.

나는 프로그래머다.

기본부터 충실하게 익히고 이해해야 API도 잘 활용할 수 있다.

지금 내 책상 독서대엔 딥러닝 책이 펼쳐져 있다.

나처럼 인공지능(AI) 프로그래머가 되고 싶고 딥러닝을 시작한 개발자들이 있을 것이다.

머신러닝, 딥러닝, 신경망부터퍼셉트론, 가중치, 편향, 계단 함수, 시그모이드 함수, ReLU 함수 등 처음 보는 용어들이 많다.

공부만이 답이다.

사진: Unsplash 의 Jonathan Kemper

열심히 준비해서 학습을 해야 기회가 와도 잡을 수 있다.

이 포스팅을 시작으로 매일 스터디하고 정리해서 글을 쓸 계획이다.

혹시 딥러닝이나 인공지능 개발자가 되고 싶은데 용어나 수학의 어려움 때문에 고민 중이라면자주 방문하길 바란다.

누구나 이해할 수 있을 정도로 쉽게 풀어서 정리하는 것도 목표 중 하나이기 때문이다.

인공지능(AI) 전문 프로그래머가 되기 위해 이제 첫 발을 강하게 차 올려본다.

 

 

반응형