Deep Learning (딥 러닝)

5단 분석법

순서
분석
단어
내용
1
일반 명사
Deep
깊은
Learning
직간접적인 경험이나 훈련에 의해 지속적으로 자각하고, 인지하며, 변화시키는 행동 변화
Deep Learning
깊은 학습?
2
고유 명사
Deep Learning
데이터를 기반으로 비선형 모델을 자동으로 만들어주는 기법 (비선형, 자동화가 핵심) 즉, 비선형 그래프를 그려주는 것이다.
3
사용 이유
Deep Learning
복잡한 데이터에서 각각의 특징을 자동으로 학습해 기울기와 가중치를 조정하기 때문입니다. 즉, 딥 러닝 모델은 자동으로 기울기와 웨이트를 선정하여 데이터에서 중요한 패턴과 특징을 찾아냅니다.
4
사용 방법
Deep Learning
데이터를 준비하고, 신경망 모델을 설계 및 학습시키며, 모델을 평가하고 최적화하는 과정을 통해서
5
다른 기술과의 비교
Deep Learning
-

정의

일반 명사

Deep
깊은
Learning
직간접적인 경험이나 훈련에 의해 지속적으로 자각하고, 인지하며, 변화시키는 행동 변화
Deep Learning
깊은 학습?
Deep은 '깊은'이라는 뜻을 가지고 있습니다.
이는 물리적인 깊이를 의미하기도 하지만, 여기서는 보다 복잡하고 다층적인 구조를 의미합니다.
Learning은 '학습'을 의미하며, 이는 직간접적인 경험이나 훈련을 통해 지속적으로 자각하고, 인지하며, 행동을 변화시키는 과정을 뜻합니다.
학습은 인간의 성장과 발전에 핵심적인 역할을 하며, 다양한 형태로 이루어질 수 있습니다.
Deep Learning(딥 러닝)을 문자 그대로 해석하면 '깊은 학습'이라고 할 수 있습니다.
이는 학습 과정이 매우 복잡하고 다층적인 구조를 통해 이루어진다는 의미를 내포하고 있습니다.
고유 명사를 살펴볼까요?

고유 명사

Deep Learning
데이터를 기반으로 비선형 모델을 자동으로 만들어주는 기법 (비선형, 자동화가 핵심) * 모델 : 현실 세계의 데이터를 기반으로 하여 그 데이터의 패턴과 관계를 학습하고, 이를 통해 예측이나 결정을 내릴 수 있는 추상화된 시스템
Deep Learning은 데이터를 기반으로 비선형 모델을 자동으로 만들어주는 기법입니다.
큰 틀에서 사람의 사고방식을 컴퓨터에게 가르치는 머신 러닝의 한 분야라고 생각하시면 됩니다.
비선형이 뭔가요?
비선형은 입력과 출력 사이의 관계가 직선으로 표현되지 않는 특성을 의미합니다. 즉, 입력이 변화함에 따라 출력이 일정한 비율로 변화하지 않고, 곡선 형태로 변화하는 경우를 비선형이라고 합니다.
비선형 관계는 선형 함수(예: y = mx + b)로 설명할 수 없는 복잡한 패턴을 포함합니다. 예를 들어, y = x²와 같은 함수는 비선형입니다.
y | | * | * | * | * | * | * |*________________________ x
Lua
복사
y= 2x+3 (x가 증가할 때 y도 일정한 비율로 증가)
y | * | * | * | * | * | * | * |________________________ x
Lua
복사
y = x² (x가 증가할 때 y는 점점 더 큰 비율로 증가)
Deep Learning은 기본적으로 위 이미지와 같은 구조를 가지고 있습니다.
데이터를 모델에 입력하고, 모델에선 학습 또는 예측을 실시합니다.
그리고, 그 결과를 정답과 비교하는 Evaluate(심사) 과정을 거칩니다.
전체적인 흐름을 보면 아래의 차트와 같이 확인할 수 있습니다.
graph LR
    A[데이터 준비] --> B[모델 설계]
    B --> C[모델 초기화]
    C --> D[훈련]
    D --> E[평가]
    E --> F{성능 만족?}
    F -->|No| G[하이퍼파라미터 조정]
    G --> D
    F -->|Yes| H[배포]
Mermaid
복사
단계
이름
설명
1
데이터 준비
딥러닝 모델을 훈련시키기 위한 데이터를 준비하는 단계입니다.
2
모델 설계
신경망 구조를 설계하는 단계입니다.
3
모델 초기화
모델의 가중치와 바이어스를 초기화하는 단계입니다.
4
훈련
훈련 데이터를 사용하여 모델을 훈련시키는 단계입니다.
5
평가
테스트 데이터를 사용하여 모델의 성능을 평가하는 단계입니다.
6
성능 만족?
모델의 성능이 만족스러운지 여부를 판단하는 단계입니다.
7
하이퍼파라미터 조정
모델의 성능이 만족스럽지 않은 경우, 하이퍼파라미터를 조정하는 단계입니다.
8
배포
성능이 만족스러운 모델을 실제 환경에 배포하는 단계입니다.

딥러닝과 머신러닝 플로우차트의 차이점

딥러닝과 일반적인 머신러닝 플로우차트의 차이점은 주로 모델 설계와 훈련 과정에 있습니다.
딥러닝은 신경망의 설계와 초기화가 중요한 부분을 차지합니다.

딥러닝 플로우차트

모델 설계 단계가 포함되어 있어 신경망 구조를 설계합니다.
모델 초기화 단계에서 가중치와 바이어스를 초기화합니다.

머신러닝 플로우차트

모델 선택 및 훈련 단계에서 알고리즘을 선택하고 훈련합니다.
모델 조정 및 재훈련 단계에서 하이퍼파라미터 조정을 포함합니다.
bias가 무엇인가요?
입력 데이터에 추가되는 상수 값입니다.
y=Wx+b
여기서 바이어스 b는 y절편으로, 데이터가 x축을 따라 이동하는 것을 허용합니다.
y | | * * | * |*________________ x
Plain Text
복사
위의 예에서, 바이어스 b가 있는 경우 직선이 y축을 따라 이동할 수 있습니다.

비유를 통한 설명

바이어스를 집의 난방 시스템에 비유할 수 있습니다. 난방 시스템에서 설정 온도가 0도라고 가정해 봅시다. 이 경우, 외부 온도가 0도보다 낮을 때만 난방이 작동합니다. 하지만 바이어스를 설정 온도에 추가하면, 외부 온도가 0도 이상이어도 난방 시스템이 작동할 수 있습니다. 바이어스는 설정 온도를 조정하여 난방 시스템이 더 유연하게 작동할 수 있도록 합니다.
하이퍼파라미터가 무엇인가요?
머신러닝 및 딥러닝 모델의 학습 과정에서 개발자가 미리 설정해야 하는 변수입니다. 이 변수들은 모델의 학습 성능과 효율성에 큰 영향을 미치며, 학습 과정 중에 조정되지 않고 고정된 상태로 유지됩니다.

주요 하이퍼파라미터

하이퍼파라미터
정의
영향
학습률 (Learning Rate)
모델이 가중치를 업데이트하는 속도를 결정하는 값
학습률이 너무 높으면 학습이 불안정해질 수 있고, 너무 낮으면 학습 속도가 매우 느려질 수 있습니다.
배치 크기 (Batch Size)
한 번의 학습 단계에서 사용되는 훈련 데이터 샘플의 수
배치 크기가 크면 메모리 사용량이 증가하지만 학습이 안정적입니다. 작으면 메모리 사용량이 적지만 학습이 불안정할 수 있습니다.
에폭 (Epochs)
전체 훈련 데이터셋을 한 번 학습하는 주기의 수
에폭 수가 많으면 모델이 데이터를 더 많이 학습하지만, 과적합(Overfitting)될 위험이 있습니다.
신경망의 층 수 및 뉴런 수
신경망의 구조를 결정하는 하이퍼파라미터
층 수와 뉴런 수가 많으면 모델이 복잡한 패턴을 학습할 수 있지만, 계산 비용이 증가하고 과적합될 수 있습니다.
드롭아웃 비율 (Dropout Rate)
학습 중 일부 뉴런을 무작위로 제외시키는 비율
과적합을 방지하고 모델의 일반화 성능을 향상시킵니다.

사용 이유

Deep Learning
복잡한 데이터에서 각각의 특징을 자동으로 학습해 기울기와 가중치를 조정하기 때문입니다. 즉, 딥 러닝 모델은 자동으로 기울기와 웨이트를 선정하여 데이터에서 중요한 패턴과 특징을 찾아냅니다.
이유
설명
높은 예측 정확도
딥 러닝 모델은 ANN 구조를 통해 복잡한 데이터에서 높은 수준의 특징을 자동으로 학습합니다. 이를 통해 매우 높은 정확도의 예측을 수행할 수 있습니다. 예를 들어, 이미지 인식, 음성 인식, 자연어 처리 등에서 뛰어난 성능을 발휘합니다.
자동화된 특징 학습
전통적인 머신 러닝에서는 데이터에서 유용한 특징을 직접 추출해야 하지만, 딥 러닝은 데이터로부터 자동으로 특징을 학습할 수 있습니다. 이는 많은 시간을 절약하고, 더 나은 성능을 얻는 데 도움이 됩니다.
확장성 및 유연성
딥 러닝 모델은 매우 큰 규모의 데이터를 처리할 수 있으며, 다양한 응용 분야에 쉽게 적용할 수 있습니다. 이는 다양한 산업에서 딥 러닝을 효과적으로 활용할 수 있게 합니다.
ANN(Artificial Neural Network) 구조란?
여러 Hidden Layer(은닉층)을 통해 복잡한 패턴을 학습하는 인공 신경망입니다.

사용 방법

Deep Learning
복잡한 데이터에서 높은 수준의 특징을 자동으로 학습해 기울기와 weight를 조정하기 때문에
순서
단계
설명
1
데이터 준비
딥 러닝 모델을 학습시키기 위해서는 대량의 데이터가 필요합니다. 이 데이터는 수집, 정제, 전처리 과정을 거쳐 학습에 적합한 형태로 변환됩니다. 예를 들어, 이미지 데이터의 경우 크기 조정, 정규화 등의 전처리 작업이 필요합니다.
2
신경망 모델 설계
딥 러닝에서는 여러 층을 가진 신경망 모델을 설계합니다. 이 모델은 입력층, 여러 개의 은닉층, 출력층으로 구성되며, 각 층은 뉴런이라고 불리는 작은 단위로 이루어집니다. 모델의 구조와 각 층의 뉴런 수, 활성화 함수를 설계하는 과정이 필요합니다.
3
모델 학습
준비된 데이터를 사용하여 신경망 모델을 학습시킵니다. 이 과정에서 모델은 데이터의 패턴을 학습하고, 손실 함수와 최적화 알고리즘을 통해 가중치를 조정합니다. 학습 과정은 반복적으로 이루어지며, 각 반복을 에폭(epoch)이라고 합니다.
4
모델 평가
학습이 완료되면, 별도의 검증 데이터를 사용하여 모델의 성능을 평가합니다. 이를 통해 모델이 새로운 데이터에 대해 얼마나 잘 예측하는지 확인하고, 필요에 따라 모델을 개선합니다.
5
모델 최적화
평가 결과를 토대로 모델을 최적화합니다. 이는 하이퍼파라미터 튜닝, 더 많은 데이터를 사용한 재학습, 모델 구조 변경 등을 포함할 수 있습니다.

XOR 문제를 해결하기 위한 간단한 신경망 모델을 설계하고 학습시키는 예제

XOR (Exclusive OR)

XOR은 "배타적 OR"을 의미하는 논리 연산입니다. 두 개의 입력 값이 있을 때, 두 값이 서로 다를 때만 결과가 참(True)이 되는 연산입니다. 두 입력이 같으면 결과는 거짓(False)입니다.

진리표

XOR 연산의 진리표는 다음과 같습니다:
입력 A
입력 B
출력 (A XOR B)
0
0
0
0
1
1
1
0
1
1
1
0

TensorFlow (Keras)

PyTorch

알면 좋은 정보

머신러닝 vs. 딥러닝

딥 러닝은 기존의 머신러닝 알고리즘과 비교하여 다음과 같은 차별점을 가지고 있습니다.
비교 항목
머신 러닝
딥 러닝
특징 추출
수동
자동
데이터 요구량
상대적으로 적음
매우 많음
계산 복잡도
낮음
높음
성능
단순 문제에 강점
복잡한 문제에 강점
유연성
특정 문제에 특화
다양한 문제에 적용 가능
딥 러닝 모델은 복잡한 데이터에서 높은 수준의 특징을 자동으로 학습하고, 매우 높은 정확도로 예측을 수행하는 강력한 머신 러닝 기술입니다.
데이터 준비, 신경망 모델 설계, 모델 학습, 평가, 최적화 단계를 통해 사용되며, 전통적인 머신 러닝 방법에 비해 자동화된 특징 학습, 확장성, 유연성 측면에서 큰 장점을 가집니다.

미니퀘스트

1번 미니퀘스트 - 신경망 구조 변경 실습

문제 설명

실습 프로젝트 코드에서 신경망의 은닉층 수와 각 층의 뉴런 수를 변경해 보고, 모델의 성능이 어떻게 달라지는지 비교합니다.
1.
기본 모델 구조
은닉층 1개, 뉴런 수 2개 (사용 예제 코드의 기본 구조)
2.
변경 모델 구조
은닉층 2개, 첫 번째 층 뉴런 수 4개, 두 번째 층 뉴런 수 2개
입력층: 은닉층1: 은닉층2: 출력층: (x1) ----o--> [ 뉴런1 (ReLU) ] ----o--> [ 뉴런5 (ReLU) ] ----o---+ ^ ^ | | | v o o [ 뉴런7 (Sigmoid) ] ---> (y) | | ^ (x2) ----o--> [ 뉴런2 (ReLU) ] ----o--> [ 뉴런6 (ReLU) ] ----o---+ | ^ | | | o o | | [ 뉴런3 (ReLU) ] ---------------+ | | [ 뉴런4 (ReLU) ]
Python
복사
은닉층 1개, 뉴런 수 4개
입력층: 은닉층: 출력층: (x1) ----o--> [ 뉴런1 (ReLU) ] ----o---+ | (x2) ----o--> [ 뉴런2 (ReLU) ] ----o---+ | (x3) ----o--> [ 뉴런3 (ReLU) ] ----o---+ | (x4) ----o--> [ 뉴런4 (ReLU) ] ----o---+ | v [ 뉴런5 (Sigmoid) ] ---> (y)
Python
복사
3.
예제 코드를 기반으로 신경망 모델을 두 가지 다른 구조로 변경해 봅니다.
4.
각각의 모델을 학습시키고 평가하여, 성능 차이를 비교합니다.

코드

import numpy as np import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Input # XOR 데이터 정의 X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) y = np.array([[0], [1], [1], [0]]) # 변경된 모델 1: 은닉층 2개, 뉴런 수 4개, 2개 model1 = Sequential() model1.add(Input(shape=(2,))) model1.add(Dense(4, activation='relu')) model1.add(Dense(2, activation='relu')) model1.add(Dense(1, activation='sigmoid')) # 모델 컴파일 model1.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # 모델 학습 print('모델 1 학습 중...') model1.fit(X, y, epochs=1000, verbose=0) # 모델 평가 loss1, accuracy1 = model1.evaluate(X, y) print(f'Model 1 - Loss: {loss1}, Accuracy: {accuracy1}') # 변경된 모델 2: 은닉층 1개, 뉴런 수 4개 model2 = Sequential() model2.add(Input(shape=(2,))) model2.add(Dense(4, activation='relu')) model2.add(Dense(1, activation='sigmoid')) # 모델 컴파일 model2.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # 모델 학습 print('모델 2 학습 중...') model2.fit(X, y, epochs=1000, verbose=0) # 모델 평가 loss2, accuracy2 = model2.evaluate(X, y) print(f'Model 2 - Loss: {loss2}, Accuracy: {accuracy2}')
Python
복사

결과 (예시)

변경된 모델 1의 결과
Loss: 0.4834
Accuracy: 0.75
변경된 모델 2의 결과
Loss: 0.5684
Accuracy: 0.75

결과 설명

모델
은닉층 수
각 은닉층의 뉴런 수
손실 값
정확도
설명
변경된 모델 1
2
[4, 2]
0.4834
0.75
은닉층 수와 뉴런 수가 증가하여 패턴을 더 잘 학습했으나, 정확도는 변하지 않음
변경된 모델 2
1
[4]
0.5684
0.75
손실 값이 기본 모델보다 낮지만 변경된 모델 1보다는 높음. 정확도는 변하지 않음

코드 설명

미니퀘스트 답안지

ⓒ 2024 startupcode. 모든 권리 보유. 무단 복제 금지.