본문 바로가기

Python/[모두의 딥러닝]

[모두의 딥러닝] #1. 딥러닝 시작을 위한 준비 운동

728x90
반응형
REBOOT : 기존의 블로그와는 다르게 공부하면서 새로 배우거나 중요한 내용만 작성하는 형태로 포스팅함.

[1] 나의 첫 딥러닝

인공지능/머신러닝/딥러닝의 차이

인공지능 (Artificial Intelligence, AI)

인공지능은 기계가 인간의 학습능력, 추론능력, 문제해결능력 등을 모방하도록 설계된 컴퓨터 프로그램이나 시스템을 말합니다. 인공지능은 다양한 분야에서 인간을 돕고 지원하는 기능을 수행할 수 있습니다.

 

머신러닝 (Machine Learning, ML)

머신러닝은 데이터를 기반으로 컴퓨터가 학습할 수 있도록 만드는 알고리즘과 기술의 집합입니다. 데이터를 분석하고 패턴을 학습하여 예측, 분류, 판단 등을 수행할 수 있습니다. 머신러닝은 크게 지도학습, 비지도학습, 강화학습으로 나눌 수 있습니다.

 

딥러닝 (Deep Learning, DL)

딥러닝은 머신러닝의 한 분야로서, 인공 신경망(Artificial Neural Networks, ANN)을 기반으로 한 학습 방법을 사용합니다. 대규모의 데이터를 사용하여 여러 층의 신경망을 통해 복잡한 패턴을 학습하고 분석할 수 있습니다. 이미지 인식, 자연어 처리 등 다양한 분야에서 뛰어난 성능을 보여줍니다.

구분 인공지능 머신러닝 딥러닝
정의 인간 지능의 기능을 모방한 기술 데이터 학습을 통한 패턴 인식 기술 심층 신경망을 통한 학습 기술
학습 방법 다양한 기술과 알고리즘을 포함 데이터 기반 학습 알고리즘 사용 신경망의 층(layer) 구조를 통한 학습
데이터 종류 다양한 형태의 데이터를 사용 구조화된 데이터, 이미지, 텍스트 등 대규모 비구조화된 데이터 사용
예시 응용 분야 음성 인식, 자율 주행 자동차 등 이메일 분류, 예측 분석 등 이미지 인식, 자연어 처리, 게임 등
주요 알고리즘 규칙 기반 시스템, 머신러닝 알고리즘 회귀 분석, 클러스터링, SVM 등 CNN, RNN, GAN 등

1. 딥러닝 실행을 위한 준비 사항

데이터 : 이름표의 유무로 지도학습과 비지도 학습으로 나뉘어짐.

- 지도 학습 : 이름표가 주어진 데이터를 이용해 이름표를 맞히는 것

- 지도 학습 : 이름표가 없는 데이터를 이용하여 이름표를 맞히는 것.

컴퓨터 : CPU 혹은 GPU 사용

프로그램 : 딥러닝을 구동할 프로그램

2. 딥러닝 작업 환경 만들기 : 아나콘다 환경 설정 → 텐서플로/케라스 설치 → 딥러닝 실행

텐서플로우는 딥러닝 여행의 비행기이며 케라스는 조종사이다.
항목 TensorFlow Keras
설명 Google에서 개발한 오픈소스 딥러닝 프레임워크로, 복잡한 머신러닝 모델을 구축하고 학습시킬 수 있다. TensorFlow 기반의 고수준 딥러닝 API로, 간단하고 직관적인 인터페이스를 제공한다.
역할 딥러닝 모델의 설계, 훈련, 배포 등 전 과정 지원. 딥러닝 모델 설계를 위한 간편한 인터페이스 제공.
유형 저수준 및 고수준 API 제공. 고수준 API로, TensorFlow 위에서 동작.
사용 용도 복잡한 연구 및 대규모 모델 구현. 빠르게 프로토타입을 제작하거나 간단한 모델 구현.
유연성 세부 조정 및 커스터마이징이 가능. 사용하기 쉬운 표준화된 구조 제공.
학습 곡선 초보자에게는 다소 어려울 수 있음. 초보자 친화적이며 간단한 문법.
구성 요소 저수준 API (그래프, 세션 등), 고수준 API (tf.keras). 모델 생성, 컴파일, 학습을 위한 간단한 함수 제공.
성능 최적화된 연산으로 대규모 모델 처리에 강점. TensorFlow 엔진을 활용하므로 성능은 유사.
커스터마이징 그래프 수준에서 복잡한 커스터마이징 가능. 기본 제공 기능 외 커스터마이징은 다소 제한적.
코드 복잡도 저수준 작업 시 코드가 복잡해질 수 있음. 간단하고 직관적인 코드 작성 가능.
배포 TensorFlow Serving, TensorFlow Lite 등 다양한 배포 도구 제공. TensorFlow 배포 도구를 활용해야 함.

 

아래의 코드를 주피터 노트북에서 실행한다.

# -*- coding: utf-8 -*-
# 코드 내부에 한글을 사용가능 하게 해주는 부분입니다.

# 딥러닝을 구동하는 데 필요한 케라스 함수를 불러옵니다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# 필요한 라이브러리를 불러옵니다.
import numpy as np
import tensorflow as tf

# 실행할 때마다 같은 결과를 출력하기 위해 설정하는 부분입니다.
np.random.seed(3)
tf.random.set_seed(3)

# 준비된 수술 환자 데이터를 불러들입니다.
Data_set = np.loadtxt("../dataset/ThoraricSurgery.csv", delimiter=",")

# 환자의 기록과 수술 결과를 X와 Y로 구분하여 저장합니다.
X = Data_set[:,0:17]
Y = Data_set[:,17]

# 딥러닝 구조를 결정합니다(모델을 설정하고 실행하는 부분입니다).
model = Sequential()
model.add(Dense(30, input_dim=17, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

# 딥러닝을 실행합니다.
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=100, batch_size=10)

 

from tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Dense는 TensorFlow 내의 Keras API를 사용하여 딥러닝 모델을 설계하는 데 필요한 모듈을 가져오는 코드다.

 

Sequential딥러닝 모델의 레이어를 순차적으로 쌓아 올리는 데 사용된다. 이 방식은 가장 기본적이고 직관적인 모델 구조를 제공하며, 입력 데이터가 첫 번째 레이어에서 마지막 레이어까지 순차적으로 흐른다. 이를 통해 간단한 네트워크를 빠르게 구현할 수 있다.

예를 들어, 층(layer)을 하나씩 차례로 쌓아 나가는 방식으로, 아주 간단한 네트워크 구조를 만드는 데 적합하다.

레이어를 순차적으로 쌓는다는 것은 딥러닝 모델의 층(layer)을 한 층씩 순서대로 연결하여 데이터를 처리하는 방식을 말한다. 데이터는 첫 번째 레이어에서 시작해 마지막 레이어까지 순서대로 흐르며 계산이 이루어진다.

이때 "레이어(layer)"란 데이터를 처리하는 단위 블록을 뜻한다. 데이터를 입력받아 계산을 수행하고, 그 결과를 다음 단계로 전달하는 역할을 한다. 레이어는 신경망 모델의 핵심 요소로, 모델의 입력 데이터를 점점 더 높은 수준의 특징으로 변환해준다.

 

딥러닝 모델을 만들 때, 데이터를 단계별로 가공한다고 생각하면 된다. 예를 들어, 다음과 같은 과정이 있다고 보자.

 

첫 번째, 레이어에서 데이터를 입력받아 기본 처리를 한다.

두 번째, 레이어에서는 첫 번째 레이어의 출력을 입력으로 받아 추가 계산을 한다.

세 번째, 레이어에서도 두 번째 레이어의 결과를 입력으로 받아 마지막 결과를 계산한다.

 

이처럼 데이터가 첫 번째 레이어에서 마지막 레이어까지 차례대로 이동하며 처리되는 방식이 "레이어를 순차적으로 쌓는다"는 의미다.

 

Dense완전 연결 레이어(Fully Connected Layer)를 정의하는 데 사용된다. 이 레이어는 신경망의 각 노드가 이전 레이어의 모든 노드와 연결되는 구조를 가진다. Dense 레이어는 일반적으로 신경망에서 가장 기본적인 레이어로, 입력 값에 가중치를 곱하고 편향을 더한 후 활성화 함수를 적용하여 출력 값을 생성한다.

쉽게 말해, 데이터를 입력받아 계산을 한 뒤 다음 단계로 넘기는 역할을 한다.

3. 미지의 일을 예측하는 원리

• 머신러닝 : 데이터 안의 규칙 발견 -> 데이터에 새로운 규칙 적용 -> 새로운 결과 도출

• 학습 : 데이터가 입려되고 패턴이 분석되는 과정

4. 폐암 수술 환자의 생존율 예측하기

accuracy 정확도 ; 예측이 성공할 확률
loss 손실값 ; 예측에서 빗나간 정도

5. 딥러닝의 개괄 잡기

• 케라스는 model.add() 함수를 이용해 필요한 만큼의 층을 빠르고 쉽게 쌓을 수 있다.

• 케라스의 model.add() 함수안에 Dense함수가 있으며 각 층의 특성을 설정한다.

• model.compile() 함수를 통해 이를 실행한다.

# 딥러닝 구조를 결정합니다(모델을 설정하고 실행하는 부분입니다).
model = Sequential()
model.add(Dense(30, input_dim=17, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

# 딥러닝을 실행합니다.
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=100, batch_size=10)
equential() 함수 레이어를 순차적으로 쌓는 딥러닝 모델 구조를 정의한다.
데이터를 첫 번째 레이어에서 마지막 레이어까지 순서대로 처리하는 간단한 모델을 만들 수 있다.
add() 함수 equential 모델에 새로운 레이어를 추가한다. 예제에서는 Dense 레이어를 추가하여 모델의 구조를 설정하고 있다.
Dense() 함수 Fully Connected Layer(완전 연결 레이어)를 정의하는 함수다.
첫 번째 Dense 레이어는 30개의 노드와 ReLU 활성화 함수를 사용하며, 입력 데이터의 차원은 17로 설정되어 있다.
두 번째 Dense 레이어는 출력값을 생성하는 레이어로, Sigmoid 활성화 함수를 사용해 이진 분류 문제를 해결한다.
compile() 함수 모델 학습에 필요한 설정을 정의한다. 손실 함수는 binary_crossentropy로, 이진 분류 문제에서 사용되며, 최적화 알고리즘으로는 adam이 사용되었다. 또한, 학습 중 정확도(accuracy)를 측정하도록 설정되어 있다.
fit() 함수 모델을 학습시키는 함수다. 입력 데이터 X와 출력 데이터 Y를 사용해 모델을 학습하며, 학습 횟수는 100번(epochs=100), 한 번에 처리할 데이터 배치는 10개(batch_size=10)로 설정되어 있다.
이 함수는 모델을 훈련하고 손실과 정확도를 출력해 학습 과정을 모니터링할 수 있게 해준다.

 

- input_dim : 첫 번째 레이어에서 입력 데이터의 차원을 지정하는 매개변수

- activation : 활성화 함수를 설정하는 매개변수

- loss :  손실 함수로, 모델의 출력값과 실제값 간의 차이를 계산함

- binary_crossentropy :  이진 분류 문제에서 사용되는 손실 함수로, 예측값과 실제값 사이의 교차 엔트로피를 계산함

- optimizer : 최적화 알고리즘을 지정하는 매개변수다.

- adam :  학습 속도를 조절하며, 자주 사용되는 효율적인 알고리즘 중 하나다.

- metrics :  학습 과정 중 평가할 지표를 설정한다. 여기서는 모델의 예측 정확도(accuracy)를 모니터링하도록 설정되어 있다.

[2] 딥러닝을 위한 기초 수학

시그모이드 함수

시그모이드 함수는 입력 값을 0과 1 사이의 값으로 변환하는 비선형 활성화 함수이다.

이 함수는 이진 분류와 같은 문제에서 주로 사용되며, 입력 값이 커질수록 출력 값은 1에 가까워지고, 작아질수록 출력 값은 0에 가까워지는 S자 형태를 가진다.

 

시그모이드 함수는 출력 값의 범위를 제한하기 때문에 딥러닝 모델에서 학습을 안정적으로 유지할 수 있다. 특히 출력 값이 확률로 해석되기 때문에 이진 분류 문제에서 예측 결과를 해석하기에 유리하다. 신경망의 출력층에서 주로 사용되며, 출력 값이 특정 클래스에 속할 확률로 해석될 수 있다.

 

이 함수는 비선형성을 제공하기 때문에 단순 선형 변환을 넘어 복잡한 패턴을 학습할 수 있도록 도와준다. 하지만 시그모이드 함수는 입력 값이 매우 크거나 작을 경우 기울기(미분 값)가 0에 가까워지는 기울기 소멸 문제가 발생할 수 있다. 이로 인해 깊은 신경망에서는 학습이 어려워질 수 있으며, 이런 이유로 ReLU와 같은 다른 활성화 함수가 대안으로 사용되기도 한다.

비선형 활성화 함수

비선형 활성화 함수는 신경망의 각 뉴런이 단순히 선형 변환만을 수행하지 않고, 비선형성을 추가하여 더 복잡한 패턴을 학습할 수 있도록 돕는 함수이다. 활성화 함수는 뉴런의 출력 값을 변환하여 다음 층에 전달하며, 비선형 활성화 함수를 사용하면 모델이 단순 선형 회귀 이상의 복잡한 관계를 표현할 수 있다.

 

비선형 함수는 입력 값과 출력 값 사이에 비선형 관계를 만들어내며, 이러한 관계는 다층 신경망이 다양한 패턴과 구조를 학습할 수 있게 한다. 대표적인 비선형 활성화 함수로는 ReLU, Sigmoid, Tanh 등이 있다.

선형 함수와 비선형 함수 비교 표

구분 선형 함수 비선형 함수
설명 입력 값이 출력 값과 선형적인 관계를 가짐. 입력 값과 출력 값이 비선형 관계를 가짐.
출력 값의 범위 모든 실수 특정 범위
복잡한 패턴 학습 복잡한 패턴 학습 가능
주요 특징 직선 그래프로 표현 가능 곡선 또는 S자 형태로 표현 가능
문제점 여러 층을 쌓아도 동일한 선형 함수로 귀결됨 일부 함수는 기울기 소멸 문제 발생

활성화 함수와 비활성화 함수 비교

구분 활성화 함수 비활성화 함수
설명 뉴런의 출력 값을 특정 방식으로 변환한다. 입력 값을 그대로 다음 레이어로 전달한다.
출력 값의 범위 제한적 (예: [0, 1], [-1, 1]) 제한 없음
비선형성 제공 여부 비선형성 제공 (ReLU, Sigmoid 등) 제공하지 않음
복잡한 패턴 학습 가능성 가능 불가능
주요 용도 모델의 복잡한 패턴 학습 및 분류 단순 선형 회귀 모델 등
문제점 일부 함수는 기울기 소멸 문제가 있음 정보 손실 및 학습 부족 발생

 

728x90
반응형
댓글