인공지능/머신러닝/딥러닝의 차이
인공지능 (Artificial Intelligence, AI)
인공지능은 기계가 인간의 학습능력, 추론능력, 문제해결능력 등을 모방하도록 설계된 컴퓨터 프로그램이나 시스템을 말합니다. 인공지능은 다양한 분야에서 인간을 돕고 지원하는 기능을 수행할 수 있습니다.
머신러닝 (Machine Learning, ML)
머신러닝은 데이터를 기반으로 컴퓨터가 학습할 수 있도록 만드는 알고리즘과 기술의 집합입니다. 데이터를 분석하고 패턴을 학습하여 예측, 분류, 판단 등을 수행할 수 있습니다. 머신러닝은 크게 지도학습, 비지도학습, 강화학습으로 나눌 수 있습니다.
딥러닝 (Deep Learning, DL)
딥러닝은 머신러닝의 한 분야로서, 인공 신경망(Artificial Neural Networks, ANN)을 기반으로 한 학습 방법을 사용합니다. 대규모의 데이터를 사용하여 여러 층의 신경망을 통해 복잡한 패턴을 학습하고 분석할 수 있습니다. 이미지 인식, 자연어 처리 등 다양한 분야에서 뛰어난 성능을 보여줍니다.
구분 인공지능 머신러닝 딥러닝
정의 | 인간 지능의 기능을 모방한 기술 | 데이터 학습을 통한 패턴 인식 기술 | 심층 신경망을 통한 학습 기술 |
학습 방법 | 다양한 기술과 알고리즘을 포함 | 데이터 기반 학습 알고리즘 사용 | 신경망의 층(layer) 구조를 통한 학습 |
데이터 종류 | 다양한 형태의 데이터를 사용 | 구조화된 데이터, 이미지, 텍스트 등 | 대규모 비구조화된 데이터 사용 |
예시 응용 분야 | 음성 인식, 자율 주행 자동차 등 | 이메일 분류, 예측 분석 등 | 이미지 인식, 자연어 처리, 게임 등 |
주요 알고리즘 | 규칙 기반 시스템, 머신러닝 알고리즘 | 회귀 분석, 클러스터링, SVM 등 | CNN, RNN, GAN 등 |
이 표는 각 기술의 주요 특징과 주요 응용 분야를 비교하여 설명하고 있습니다. 각 기술은 서로 보완적이며, 최근에는 머신러닝과 딥러닝 기술이 많은 실제 문제에 적용되고 있습니다.
[1] 딥러닝 실행을 위한 준비 사항
딥러닝을 실행하기 위한 준비 사항은 다음과 같습니다:
1. 데이터 (Data)
딥러닝 모델은 대량의 데이터를 필요로 합니다. 데이터는 딥러닝 모델이 학습할 때 사용되며, 모델의 성능과 정확도에 큰 영향을 미칩니다. 주요한 데이터 관련 요소는 다음과 같습니다:
- 데이터 수집: 딥러닝 모델을 학습시키기 위한 데이터를 수집해야 합니다. 데이터는 주어진 문제에 대한 정확한 정보를 담고 있어야 하며, 가능한 많은 다양성을 갖추는 것이 중요합니다.
- 데이터 전처리: 데이터는 종종 노이즈가 포함되어 있거나 형식이 일관되지 않을 수 있습니다. 따라서 데이터를 정제하고 전처리하여 모델이 학습하기 쉽도록 만들어야 합니다.
- 데이터 분할: 데이터를 학습용, 검증용, 테스트용으로 분할하는 것이 일반적입니다. 학습 데이터로 모델을 학습시키고, 검증 데이터로 모델의 성능을 평가하며, 테스트 데이터로 최종 성능을 평가합니다.
2. 컴퓨터 (Hardware)
딥러닝 모델을 학습하려면 충분한 계산 능력을 갖춘 컴퓨터가 필요합니다. 주요한 하드웨어 요소는 다음과 같습니다:
- GPU (Graphics Processing Unit): 딥러닝 모델은 병렬 처리가 가능한 GPU를 사용하여 학습 속도를 크게 향상할 수 있습니다. 특히 대규모 데이터셋이나 복잡한 모델의 경우 GPU가 필수적입니다.
- CPU (Central Processing Unit): 일부 딥러닝 작업은 CPU에서 수행될 수 있지만, 대부분의 경우 GPU가 필수적입니다. CPU는 주로 데이터 전처리나 모델 구축 등에 사용됩니다.
- 메모리: 딥러닝 모델은 많은 데이터와 매개변수를 메모리에 유지해야 하므로 충분한 RAM이 필요합니다.
GPU와 CPU의 주요 차이점을 다음과 같은 표로 정리해 드리겠습니다:
구분 CPU (Central Processing Unit) GPU (Graphics Processing Unit)
주요 용도 | 범용적인 계산 및 컴퓨터 프로그램 실행 | 그래픽 처리 및 병렬 연산 |
핵심 특징 | 적은 수의 코어(쓰레드)를 가짐, 순차적인 처리 능력이 뛰어남 | 많은 수의 코어(쓰레드)를 가짐, 병렬 처리 능력이 뛰어남 |
연산 방식 | 단일 명령 단일 데이터 (SISD, Single Instruction Single Data) | 단일 명령 다중 데이터 (SIMD, Single Instruction Multiple Data) |
메모리 관리 | 일반적으로 한 코어가 메모리에 접근하는 구조 | 많은 코어가 동시에 메모리에 접근할 수 있는 구조 |
주요 응용 분야 | 일반적인 컴퓨터 프로그램 실행, 데이터베이스 관리 등 | 그래픽 처리, 딥러닝 학습 및 추론, 과학 계산 등 |
예시 제품 및 제조사 | Intel Core, AMD Ryzen 등 | NVIDIA GeForce, AMD Radeon 등 |
GPU는 주로 병렬 처리가 필요한 작업에 유리하며, 특히 대규모 데이터의 병렬 연산이 필요한 딥러닝 학습과 같은 작업에 매우 유용합니다. CPU는 일반적인 프로그램 실행 및 다양한 컴퓨팅 작업에 보다 적합한 구조를 가지고 있습니다.
3. 프로그램 (Software)
딥러닝 모델을 구축하고 학습시키기 위한 소프트웨어 도구들이 필요합니다. 주요한 소프트웨어 요소는 다음과 같습니다:
- 딥러닝 프레임워크: Tensor Flow, PyTorch, Keras 등의 딥러닝 프레임워크를 선택하여 모델을 구축하고 학습할 수 있습니다. 이러한 프레임워크는 다양한 신경망 구조를 지원하며 GPU 가속을 통해 빠른 학습을 제공합니다.
- 개발 환경: Python과 같은 프로그래밍 언어를 사용하여 딥러닝 모델을 구현하고 관리할 수 있는 개발 환경이 필요합니다. 주로 Jupyter Notebook, IDE (Integrated Development Environment) 등을 사용합니다.
- 라이브러리: 딥러닝 모델 구축에 유용한 다양한 라이브러리들이 있습니다. 예를 들어, NumPy, Pandas 등은 데이터 처리에 유용하고, Matplotlib, Seaborn 등은 데이터 시각화에 유용합니다.
[2] 딥러닝 작업 환경 만들기
아나콘다(Anaconda)는 데이터 과학 및 머신러닝을 위한 파이썬 패키지 관리자와 환경 관리자입니다. 주로 데이터 분석, 데이터 시각화, 머신러닝 모델 개발 등에 사용됩니다. 아나콘다는 다음과 같은 주요 특징과 장점을 가지고 있습니다:
주요 특징
- 패키지 관리: 아나콘다는 기본적으로 수많은 데이터 과학 및 머신러닝 관련 패키지들을 포함하고 있습니다. 예를 들어, NumPy, Pandas, Matplotlib, Scikit-learn 등의 패키지들이 포함되어 있어, 별도로 설치할 필요 없이 바로 사용할 수 있습니다.
- 환경 관리: 가상 환경(virtual environment)을 쉽게 관리할 수 있습니다. 각 프로젝트마다 필요한 패키지 버전을 다르게 설정하여 충돌을 방지하거나 실험적인 작업을 할 수 있습니다.
- Jupyter Notebook 지원: 아나콘다에는 Jupyter Notebook이 포함되어 있어, 데이터 분석 및 머신러닝 모델 개발을 위한 인터랙티브 한 환경을 제공합니다. Jupyter Notebook은 코드 실행, 문서 작성, 시각화 등을 한 곳에서 처리할 수 있는 강력한 도구입니다.
- Cross-platform: Windows, macOS, Linux 등 여러 플랫폼에서 동일하게 작동합니다.
설치 및 사용
아나콘다를 설치하면, Anaconda Navigator라는 GUI 기반의 응용 프로그램을 통해 다양한 도구와 패키지들을 관리할 수 있습니다. 또한, Anaconda Prompt라는 명령 프롬프트를 통해 CLI(Command Line Interface)에서도 패키지 관리 및 가상 환경 관리를 할 수 있습니다.
주로 사용하는 명령어는 다음과 같습니다:
- 가상 환경 생성: conda create --name myenv python=3.8
- myenv라는 이름의 가상 환경을 생성하며, Python 버전은 3.8을 사용합니다.
- 가상 환경 활성화:
- Windows: conda activate myenv
- macOS/Linux: source activate myenv
- 패키지 설치: conda install numpy pandas matplotlib
- numpy, pandas, matplotlib 패키지를 설치합니다.
- Jupyter Notebook 실행: jupyter notebook
- 현재 활성화된 가상 환경에서 Jupyter Notebook을 실행합니다.
💡 아나콘다에 포함되지 않은 텐서플로와 케라스를 추가로 설치한다.
1. Anaconda 설치
- macOS 설치 과정:
- Anaconda 다운로드: Anaconda 공식 사이트에서 Anaconda Installer를 다운로드합니다.
- 설치: 다운로드한 Installer 파일을 실행합니다. 설치 지침에 따라 계속하여 Anaconda를 설치합니다.
- 터미널 열기: macOS에서는 터미널을 열어 Anaconda 및 Python 관련 명령어를 사용할 수 있습니다.
2. 텐서플로 설치: Anaconda 환경에서 텐서플로 설치하기
- 가상 환경 생성 (선택적): 텐서플로를 설치할 전용 가상 환경을 생성하는 것이 좋습니다. 예를 들어, 이름이 tf_env인 가상 환경을 생성합니다. 가상 환경의 이름과 원하는 파이썬 버전을 선택하여 생성합니다. 생성된 가상 환경을 활성화하기 위해 아래 명령어를 사용합니다:
- macOS / Linux:
conda activate tf_env
- conda create --name tf_env python=3.8
- 텐서플로 설치: 활성화된 가상 환경에서 텐서플로를 설치합니다. CPU 버전과 GPU 버전을 선택할 수 있습니다. GPU 버전을 설치하려면 추가적인 설정이 필요합니다 (CUDA 및 cuDNN 설치).
- CPU 버전 설치:
pip install tensorflow
- GPU 버전 설치 (CUDA 및 cuDNN이 설치된 경우):
pip install tensorflow-gpu
3. 케라스 설치
케라스는 텐서플로의 고수준 API로 포함되어 있으므로, 텐서플로를 설치하면 케라스도 함께 사용할 수 있습니다.
- 필요한 경우 추가 패키지 설치: 데이터 처리나 시각화를 위해 추가적인 패키지가 필요할 수 있습니다. 예를 들어, 데이터 분석을 위해 Pandas와 Matplotlib을 설치하려면 아래와 같이 실행합니다.
- pip install pandas matplotlib
4. 주피터 노트북 설치
주피터 노트북(Jupyter Notebook)은 인터랙티브 한 방식으로 코드를 작성하고 실행할 수 있는 웹 기반의 개발 환경입니다. 데이터 분석, 데이터 시각화, 머신러닝 모델 개발 등 다양한 분야에서 널리 사용됩니다. 주피터 노트북은 코드, 텍스트, 이미지, 수식 등을 포함한 문서형 파일인 노트북(. ipynb 파일) 형식으로 작업을 저장하고 공유할 수 있습니다.
특징 및 장점 설명
인터랙티브한 실행 환경 | 코드를 셀 단위로 실행하며 중간 결과를 실시간으로 확인할 수 있음. |
다양한 언어 지원 | 주로 파이썬을 사용하나, R, Julia, Scala 등 다양한 프로그래밍 언어를 지원하는 커널을 제공. |
Rich Text 포맷 지원 | Markdown을 사용하여 텍스트, 이미지, 링크, 수식 등을 포함한 보기 좋은 문서를 작성할 수 있음. |
시각화 지원 | Matplotlib, Seaborn 등의 시각화 라이브러리를 사용하여 데이터를 시각적으로 탐색할 수 있음. |
대화형 디버깅 | 코드 실행 중 발생하는 오류를 실시간으로 확인하고 수정할 수 있음. |
유연한 파일 관리 | .ipynb 파일 형식으로 코드, 결과 및 설명을 포함하여 실험 과정을 문서화하거나 공유할 수 있음. |
주피터 노트북 시작하기
- 터미널(또는 Anaconda Prompt)에서 실행: 아나콘다 환경에서 주피터 노트북을 실행하려면, 터미널을 열고 다음 명령어를 입력합니다. 이 명령어를 실행하면 기본 웹 브라우저에서 주피터 노트북 홈 화면이 열립니다.
- jupyter notebook
- Anaconda Navigator에서 실행: Anaconda Navigator를 사용하여 주피터 노트북을 실행할 수도 있습니다. Navigator에서 주피터 노트북 아이콘을 클릭하여 시작할 수 있습니다.
- 노트북 생성 및 사용: 홈 화면에서 새로운 노트북을 생성하거나 기존의 노트북을 열어서 작업을 시작할 수 있습니다.
주요 사용법
사용법 설명
셀 실행 | 셀을 선택하고 Shift + Enter를 누르면 선택한 셀의 코드가 실행되고 결과가 출력됨. |
셀 추가 및 삭제 | 새로운 셀을 추가하려면 Insert 메뉴를 사용하거나, A(위에 삽입) 또는 B(아래에 삽입) 키를 누름. |
셀 타입 변경 | 코드 셀을 Markdown 셀로 변경하려면 셀을 선택한 후 Cell > Cell Type > Markdown 선택. |
Markdown 사용 | Markdown 문법을 사용하여 텍스트 서식 지정, 이미지 및 링크 삽입, 수식 표현 가능. |
파일 저장 | 작업한 노트북은 자동으로 저장되지 않으므로, 저장하려면 Ctrl + S(Windows/Linux) 또는 Command + S(macOS) 사용. |
커널 재시작 | Kernel 메뉴에서 Restart 또는 Restart & Clear Output을 선택하여 커널을 재시작할 수 있음. |
명령 모드와 편집 모드 | 명령 모드(파란 테두리): 셀 이동, 셀 병합, 셀 분할 등의 명령 실행.<br>편집 모드(녹색 테두리): 셀 내용 수정. |
셀 단축키 | 명령 모드에서 H 키를 누르면 사용 가능한 단축키 목록 표시. |
💡 vscode의. ipynb 확장자를 통해 주피터 노트북을 사용할 수 있다.
[3] 미지의 일을 예측하는 원리
머신러닝의 학습
머신러닝에서의 학습은 모델이 데이터에서 패턴이나 규칙을 학습하는 과정을 말합니다. 이 과정은 데이터를 이용하여 모델의 파라미터를 조정하고 최적화하는 것을 포함합니다.
머신러닝의 기본 원리
- 데이터와 특징(Features):
- 머신러닝 모델은 데이터에서 학습하고 예측을 수행합니다. 데이터는 입력값으로 사용되며, 이 데이터는 특징(Features)의 집합으로 구성됩니다. 예를 들어, 이미지 분류에서 각 픽셀의 값이 특징이 될 수 있습니다.
- 라벨 또는 타깃(Target):
- 학습 데이터는 입력 데이터와 함께 정답(라벨 또는 타깃)을 포함합니다. 모델은 입력 데이터와 이 정답 사이의 패턴을 학습하여 나중에 새로운 데이터에 대해 예측을 수행할 수 있습니다.
- 모델(Model):
- 머신러닝 모델은 학습 데이터에서 데이터의 패턴을 학습하는 수학적인 알고리즘입니다. 모델은 입력 데이터를 입력받아 출력값을 예측하거나 분류하는 작업을 수행합니다.
- 손실 함수(Loss Function):
- 모델이 예측한 값과 실제 타깃 값 사이의 차이를 계산하는 함수입니다. 이 함수는 모델이 얼마나 잘 예측했는지를 평가하는 지표로 사용됩니다. 학습 과정에서 최소화되어야 할 목표 함수입니다.
- 학습 알고리즘(Training Algorithm):
- 머신러닝 모델은 학습 알고리즘을 사용하여 학습 데이터에서 최적의 모델 파라미터(가중치와 편향 등)를 찾습니다. 이 과정에서 모델은 손실 함수를 최소화하도록 업데이트됩니다.
- 평가(Evaluation):
- 학습된 모델은 테스트 데이터(새로운 데이터)에 대해 평가되어야 합니다. 평가는 모델의 성능을 측정하고 일반화(generalization) 능력을 평가하는 중요한 단계입니다.
머신러닝의 주요 유형
유형 설명
지도 학습 (Supervised Learning) | 입력 데이터와 그에 대응하는 정답(라벨 또는 타깃)을 학습하여 모델을 생성하는 방식입니다. 주어진 데이터와 정답을 이용해 모델을 학습시키고, 새로운 입력에 대해 정확한 출력을 예측합니다. 주로 회귀와 분류 문제에 사용됩니다. |
비지도 학습 (Unsupervised Learning) | 정답(타깃) 데이터 없이 입력 데이터의 패턴이나 구조를 학습하는 방식입니다. 데이터 간의 숨겨진 구조를 발견하거나 데이터를 클러스터링하고 차원을 축소하는 등의 작업에 사용됩니다. |
강화 학습 (Reinforcement Learning) | 에이전트가 환경과 상호작용하며 행동의 결과로 받는 보상을 최대화하기 위해 학습하는 방식입니다. 시행착오를 통해 학습하며, 주로 게임이나 로봇 제어 등에 활용됩니다. |
머신러닝의 모델
머신러닝 모델은 데이터로부터 학습된 패턴을 나타내는 수학적인 모형입니다. 이 모델은 입력 데이터를 받아서 출력을 예측하거나 분류하는 역할을 합니다. 다양한 머신러닝 모델이 있으며, 각 모델은 데이터의 특성에 따라 선택되고 적용됩니다.
모델 설명
선형 회귀 (Linear Regression) | 입력 특징과 출력 사이의 선형 관계를 모델링하는 회귀 모델입니다. |
로지스틱 회귀 (Logistic Regression) | 이진 분류 문제에 사용되며 로지스틱 함수를 사용하여 출력을 확률로 예측합니다. |
결정 트리 (Decision Tree) | 데이터를 분할하여 규칙 기반으로 예측하는 모델입니다. |
랜덤 포레스트 (Random Forest) | 여러 결정 트리를 앙상블하여 예측 성능을 향상시키는 모델입니다. |
서포트 벡터 머신 (Support Vector Machine, SVM) | 최적의 결정 경계를 찾아 데이터를 분류하는 모델입니다. |
신경망 (Neural Networks) | 복잡한 비선형 관계를 모델링하는 딥러닝 기반의 모델입니다. |
군집화 (Clustering) | 데이터를 유사한 그룹으로 나누는 비지도 학습 모델입니다. |
차원 축소 (Dimensionality Reduction) | 고차원 데이터의 차원을 축소하여 데이터를 단순화하는 모델입니다. |
[4] 폐암 수술 환자의 생존율 예측하기
01_My_First_Deeplearning.ipynb
# -*- 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)
47/47 ━━━━━━━━━━━━━━━━━━━━ 559us/step - accuracy: 0.8531 - loss: 12.7859 Epoch 2/100 47/47 ━━━━━━━━━━━━━━━━━━━━ …
딥러닝에서 사용되는 손실 값(loss)과 정확도(accuracy)는 모델의 성능을 측정하고 평가하는 데 중요한 지표입니다. 각각의 의미와 계산 방법에 대해 설명하겠습니다.
Loss (손실 값)
손실 값은 모델이 예측한 값과 실제 값 사이의 차이를 나타내는 지표입니다. 이 차이를 최소화하는 것이 모델 학습의 주요 목표입니다. 손실 값은 일반적으로 다음과 같은 과정을 통해 계산됩니다:
- 손실 함수(Loss Function):
- 손실 함수는 모델이 예측한 값과 실제 값 사이의 차이를 계산하는 함수입니다. 예를 들어, 회귀 문제에서는 주로 평균 제곱 오차(Mean Squared Error, MSE)가 사용되고, 분류 문제에서는 크로스 엔트로피 손실(Cross-Entropy Loss)이 자주 사용됩니다.
- 모델의 예측과 실제 값 비교:
- 모델은 입력 데이터를 받아 예측 값을 출력합니다. 이 예측 값과 실제 라벨 또는 타깃 값을 비교하여 손실 함수를 통해 차이를 계산합니다.
- 손실 값 계산:
- 계산된 예측 값과 실제 값의 차이를 손실 함수를 통해 하나의 숫자로 나타냅니다. 이 값이 낮을수록 모델의 예측이 실제와 비슷하다는 의미이며, 더 좋은 성능을 나타냅니다.
손실 값은 학습 과정에서 주로 사용되며, 모델이 학습할 때마다 손실 값을 최소화하기 위해 모델 파라미터를 조정합니다.
Accuracy (정확도)
정확도는 모델이 정확하게 예측한 비율을 나타내는 지표입니다. 일반적으로 분류 문제에서 사용되며, 다음과 같은 방식으로 계산됩니다:
- 예측과 실제 값 비교:
- 모델은 입력 데이터를 받아 예측 값을 출력합니다. 이 예측 값과 실제 라벨 또는 타깃 값을 비교하여 정확하게 예측한 비율을 계산합니다.
- 정확도 계산:
- 정확하게 예측한 샘플의 수를 전체 샘플 수로 나눈 비율로 정의됩니다. 일반적으로 백분율로 표시됩니다.
정확도는 모델의 전반적인 성능을 평가하는 데 사용됩니다. 하지만 클래스 불균형(class imbalance)이나 특정 문제 상황에서는 정확도만으로는 충분하지 않을 수 있습니다.
- 예측 성공률은 데이터를 분석해 데이터를 확장하거나, 딥러닝 구조를 적절하게 바꾸는 등의 노력으로 향상될 수 있습니다.
[5] 딥러닝의 개괄 잡기
첫 번째 부분: 데이터 분석과 입력
# 필요한 라이브러리를 불러옵니다.
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=",")
파이썬의 라이브러리는 다양한 기능을 제공하여 개발자가 효율적으로 프로그래밍할 수 있도록 도와줍니다. 라이브러리는 함수, 클래스, 메서드 등의 모음으로, 특정 기능을 구현하고 활용할 수 있는 코드의 집합입니다.
- import 문을 사용하여 코드에 가져올 수 있습니다.
- import 함수는 파이썬에서 외부 모듈이나 라이브러리를 현재 코드로 가져오는 역할을 합니다.
NumPy(Numerical Python)는 파이썬에서 과학적 계산을 수행하는 데 필수적인 패키지입니다. 주로 다차원 배열(array)을 다루는 데 특화되어 있으며, 이러한 배열을 기반으로 효율적인 계산을 지원합니다.
특징 설명
다차원 배열 (ndarray) | N차원 배열 객체로, 고성능의 데이터 구조를 제공합니다. 벡터 및 행렬 연산에 특화되어 있습니다. |
브로드캐스팅 (Broadcasting) | 배열 간의 연산을 가능하게 하며, 차원이 다른 배열들 간의 연산도 자동으로 맞춰줍니다. |
벡터화 연산 | 반복문을 사용하지 않고 배열 단위로 연산을 처리할 수 있어 계산 속도가 빠릅니다. |
선형 대수 연산 | 행렬과 벡터 연산을 지원하며, 선형 대수 계산에 유용합니다. |
난수 생성 | 다양한 종류의 난수 생성 함수를 제공하여 시뮬레이션 등에 활용할 수 있습니다. |
파일 입출력 | 배열 데이터를 파일로 저장하고 읽어오는 함수를 제공합니다. |
효율적인 메모리 사용 | C 언어와 연결되어 있어 메모리 사용이 효율적이며, 대용량 데이터 처리에 적합합니다. |
유니버설 함수 (ufunc) | 배열의 각 요소에 대해 연산을 적용하는 함수로, 산술 연산부터 삼각 함수까지 다양한 함수를 제공합니다. |
Data_set = np.loadtxt("../dataset/ThoraricSurgery.csv", delimiter=", ")
위 코드에서는 Data_set라는 임시 저장소를 만들고, 넘파이 라이브러리 안에 있는 loadtxt 함수를 이용해 데이터 셋을 불러옵니다.
ThoraricSurgery.csv 데이터 셋은 폐암 수술 환자의 수술 전 진단 데이터와 수술 후 생존 결과를 기록한 실제 데이터입니다.
쉼표(,)로 이어진 항목 18개는 환자마다의 18개의 정보입니다.
앞의 17개 정보는 종양의 유형, 폐활량, 호흡 곤란 여부, 고통 정도, 기침, 흡연, 천식 여부 등 17가지의 환자 상태를 조사해 서 기록해 놓은 것이며 마지막 18번째 정보는 수술 후 생존 결과입니다. 1은 true, 즉 해당 사항이 있다(생존)는 것을 뜻하 고 0은 false, 즉 해당 사항이 없다(사망)는 것을 뜻합니다.
이번 프로젝트의 목적은 1번째부터 17번째까지의 항목을 분석해서 18번째 항목, 즉 수술 후 생존 또는 사망을 맞히는 것입니다.
1번째 항목부터 17번째 항목까지를 속성(aribute)이라고 하고, 정답에 해당하는 18번째 항목을 클래스(class)라고 합니다.
💡 딥러닝을 구동시키려면 '속성만을 뽑아 데이터셋을 만들고,
'클래스'를 담는 데이터셋을 또 따로 만들어 줘야 합니다.
X = Data_set[:,0:17]
Y = Data_set[:,17]
속성(Attributes)과 클래스(Class) 개요
속성(Attributes): 딥러닝에서 모델이나 데이터에 대한 특징이나 속성을 의미합니다. 예를 들어, 모델의 구조(레이어 수, 뉴런 수 등), 학습 데이터의 특징(입력 특성의 수, 출력 클래스 수 등) 등이 속성에 해당됩니다.
클래스(Class): 딥러닝에서 클래스는 주로 두 가지 의미로 사용됩니다. 하나는 객체 지향 프로그래밍에서 클래스(Class)를 의미하며, 다른 하나는 분류 문제에서 데이터의 카테고리를 의미합니다.
항목 설명
모델 속성 | 딥러닝 모델의 구성 요소와 관련된 특성을 나타냅니다. |
- 레이어 수 | 모델에 포함된 총 레이어의 개수입니다. |
- 뉴런 수 | 각 레이어에 포함된 뉴런의 수를 나타냅니다. |
- 가중치 및 편향 | 모델의 각 뉴런과 레이어 간의 연결 강도를 결정하는 가중치(weight)와 편향(bias) 값입니다. |
데이터 속성 | 딥러닝 학습에 사용되는 데이터의 특성을 나타냅니다. |
- 입력 특성 수 | 각 데이터 포인트에 대한 입력 변수의 개수입니다. |
- 출력 클래스 수 | 분류 문제에서 예측해야 할 클래스의 개수입니다. |
분류(Class) | 분류 문제에서의 클래스는 데이터가 속하는 카테고리를 나타냅니다. |
- 클래스 레이블 | 각 데이터 포인트가 속하는 카테고리를 나타내는 레이블(label)입니다. |
- 클래스 수 | 데이터가 분류되는 전체 카테고리의 수입니다. |
두 번째 부분: 딥러닝 실행
# 딥러닝을 구동하는 데 필요한 케라스 함수를 불러옵니다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
#생략
# 딥러닝 구조를 결정합니다(모델을 설정하고 실행하는 부분입니다).
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)
- 딥러닝 프로젝트가 “여행”이라면 텐서플로는 목적지까지 빠르게 가는 “비행기”이고 케라스는 비행기의 이륙 및 정확한 지점까지의 도착을 책임지는 “파일럿”이라 할 수 있다.
- Sequential 함수는 딥러닝의 구조를 한 층 한 층 쉽게 쌓아 올릴 수 있도록 해줍니다.
주요 딥러닝 층 구조
딥러닝에서의 층 구조는 인공 신경망의 기본 구성 요소입니다.
층(layer)은 데이터를 처리하고 추상화하는 단위로, 각 층은 입력 데이터에서 점진적으로 더 의미 있는 특성을 추출하거나 변환합니다. 이 과정을 통해 최종적으로 원하는 결과를 도출할 수 있습니다.
- 입력 층 (Input Layer): 네트워크에 데이터를 입력하는 층
- 주어진 데이터의 형태와 크기에 따라 입력 층의 뉴런 수가 결정됩니다.
- 은닉 층 (Hidden Layer): 입력 층과 출력 층 사이에 위치한 중간층
- 다수의 은닉 층이 있을 수 있으며, 각 층은 서로 다른 특성을 추출하거나 학습합니다.
- 은닉 층에서는 주로 활성화 함수(activation function)를 사용하여 비선형성을 추가합니다.
- 출력 층 (Output Layer): 네트워크에서 최종적으로 출력되는 층
- 출력 층의 뉴런 수는 특정 작업에 따라 결정되며, 예를 들어 이진 분류의 경우 하나의 뉴런을 사용하고, 다중 분류의 경우 클래스 수와 동일한 수의 뉴런을 사용할 수 있습니다.
- 출력 층의 활성화 함수는 문제의 성격에 따라 달라질 수 있습니다 (예: 시그모이드 함수, 소프트맥스 함수).
텐서플로(Tensor Flow)와 케라스(Keras)의 주요 특징과 차이점을 비교한 표는 아래와 같습니다.
구분텐서플로 (Tensor Flow) 케라스 (Keras) 개발자 및 주요 기업주요 특징배경 및 역사사용성 및 직관성구현 방식주요 사용처백엔드 엔진 지원
구글 (Google) | 프랑수아 숄레(François Chollet) |
- 다양한 신경망 구조 지원 (CNN, RNN 등) - 분산 학습 및 GPU 가속 지원 - 자동 미분(automatic differentiation) 기능 제공 |
- 간편하고 직관적인 API 제공 - 높은 추상화 수준 - 여러 백엔드 엔진 지원 (TensorFlow, Theano, CNTK) |
구글에서 개발하고 지원하는 대규모 딥러닝 프레임워크 | 초기에는 독립적인 딥러닝 라이브러리로 개발되었으며, 현재는 TensorFlow의 고수준 API로 통합 |
높은 유연성과 성능, 대규모 데이터 처리에 적합 | 간단한 API를 통한 빠른 모델 프로토타이핑 가능 |
높은 수준의 커스터마이징 가능 | 사용자 친화적인 API 제공 |
대규모의 복잡한 모델과 연구에서 널리 사용 | 빠른 프로토타이핑 및 간편한 모델 구축에 적합 |
TensorFlow, 그외 다양한 백엔드 지원 | 주로 TensorFlow, Theano, CNTK 등 다양한 백엔드 지원 |
model = Sequential() model.add(Dense(30, input_dim=17, activation='relu')) model.add(Dense(1, activation='sigmoid'))
- model.add 함수를 이용해 두 개의 층을 쌓은 것을 확인할 수 있습니다.
- 케라스는 model.add 함수를 이용해 필요한 만큼의 층을 빠르고 쉽게 쌓을 수 있습니다.
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X, Y, epochs=100, batch_size=10)
- compile 함수를 이용해 이를 실행시킵니다.
딥러닝 시작을 위한 준비 운동
[1] 일차 함수, 기울기와 y절편
함수(Function)는 수학에서 두 집합 사이의 관계를 나타내는 개념으로, 각 입력값에 대해 정확히 하나의 출력값이 대응하는 규칙을 말합니다. 함수는 일반적으로 f(x)로 표기되며, 여기서 x는 입력값이고 f(x)는 해당 입력값에 대한 출력값입니다.
일차 함수는 가장 간단한 형태의 함수 중 하나로, 직선으로 표현되는 함수입니다. 일차 함수는 입력값과 출력값 사이의 관계가 직선적(linear)인 경우를 의미합니다.
일차 함수의 일반적인 형태:
y=mx+b |
- y는 출력값(종속변수)
- x는 입력값(독립변수)
- m은 기울기 : 직선의 기울기는 x의 변화에 따른 y의 변화율
- b는 y절편 : 직선이 y축과 만나는 점의 y값
- 딥러닝에서의 사용:
- 기울기는 신경망의 가중치(weight)에 해당하며, y절편은 편향(bias)에 해당합니다.
- 선형 활성화 함수나 선형 회귀 문제에서 사용됩니다.
항목 설명
함수 | 입력값에 대해 하나의 출력값을 대응시키는 규칙 |
일차 함수 | 직선으로 표현되는 함수 |
기울기 (m) | 직선의 경사와 방향을 결정 |
y절편 (b) | 직선이 y축과 만나는 점 |
[2] 이차 함수와 최솟값
- 설명:
- 이차 함수: 이차 함수는 곡선 형태로 표현되며, 일반적인 형태는 y=ax^2+bx+c입니다.
- 최솟값: 이차 함수는 U자 형태의 곡선을 가지며, 이 곡선의 최저점이 최솟값입니다.
- 딥러닝에서의 사용:
- 손실 함수의 형태로 사용되며, 최솟값을 찾는 것은 모델 최적화 과정에서 중요합니다.
- 예: 평균 제곱 오차(MSE) 손실 함수.
[3] 미분, 순간 변화율과 기울기
- 미분: 함수의 순간 변화율입니다.
- 순간 변화율: 어떤 점에서의 함수의 기울기입니다.
미분 계수 (Derivative)
미분 계수는 특정 지점에서의 함수의 순간 변화율을 나타냅니다. 기하학적으로는 곡선의 접선의 기울기를 의미합니다.
함수 f(x)의 x에서의 미분 계수는 다음과 같이 정의됩니다.
기하학적 의미:x에서 함수 f(x)의 접선의 기울기입니다. 이는 곡선이 해당 지점에서 어떻게 변화하는지를 나타냅니다.
기울기 (Gradient)
기울기는 다변수 함수에서 각 변수에 대한 편미분을 포함하는 벡터입니다. 이는 특정 지점에서 함수의 증가 방향을 나타내며, 경사 하강법(Gradient Descent)과 같은 최적화 알고리즘에서 중요한 역할을 합니다.
- 다변수 함수 f(x1, x2,…, xn)에서의 기울기 벡터∇f는 각 변수에 대한 편미분으로 구성됩니다.
- 기울기 벡터는 함수의 가장 큰 증가 방향을 가리키며, 벡터의 크기는 증가율을 나타냅니다.
딥러닝에서 미분과 기울기의 역할
- 손실 함수 (Loss Function):
- 딥러닝 모델의 성능을 평가하기 위해 손실 함수를 사용합니다. 손실 함수는 모델의 예측 값과 실제 값 간의 차이를 나타냅니다.
- 예: 평균 제곱 오차(MSE), 크로스 엔트로피 손실 함수 등.
- 경사 하강법 (Gradient Descent):
- 손실 함수를 최소화하기 위해 기울기를 이용하여 가중치를 업데이트합니다.
- 기본 아이디어는 손실 함수의 기울기를 따라 내려가며 최솟값을 찾는 것입니다.
- 역전파 (Backpropagation):
- 신경망의 각 층에서 기울기를 계산하여 가중치를 업데이트합니다.
- 손실 함수의 미분을 통해 각 가중치에 대한 변화율을 구합니다.
- 역전파 알고리즘은 기울기 계산을 효율적으로 수행하여 네트워크의 모든 가중치를 업데이트합니다.
- 최적화 알고리즘:
- 다양한 최적화 알고리즘이 경사 하강법을 기반으로 합니다. 예를 들어, 모멘텀, RMSProp, Adam 등이 있습니다.
- 이들 알고리즘은 기울기의 크기와 방향을 고려하여 가중치 업데이트를 개선합니다.
[4] 편미분
편미분은 다변수 함수에서 특정 변수에 대해 다른 변수들을 상수로 간주하고 미분하는 것을 말합니다.
예를 들어, 함수 f(x, y)가 두 변수 x와 y에 대해 정의되어 있을 때, x에 대한 편미분과 y에 대한 편미분을 계산할 수 있습니다.
예제
f(x,y) = x^2+3xy+y^2 ∂f/∂x=∂/∂x(x^2+3xy+y^2) |
- x에 대한 편미분: y를 상수로 간주하고, x에 대해 미분합니다.
- x2의 미분은 2x입니다.
- 3xy에서 y는 상수로 간주되므로, 3y는 상수 계수로 남고 x의 미분은 3y가 됩니다.
- y^2는 x에 의존하지 않으므로 상수로 간주되어 미분하면 0이 됩니다.
∂f/∂x=2x+3y |
- y에 대한 편미분: y를 상수로 간주하고, x에 대해 미분합니다.
- x^2는 y에 의존하지 않으므로 상수로 간주되어 미분하면 0이 됩니다.
- 3xy에서 x는 상수로 간주되므로, 3x는 상수 계수로 남고 y의 미분은 3x가 됩니다.
- y^2의 미분은 2y입니다.
∂f/∂x=3x+2y |
- 다수의 가중치와 편향을 가지는 신경망에서 각 파라미터에 대한 손실 함수의 변화율을 계산하여 최적화에 사용됩니다.
- 역전파 과정에서 각 가중치에 대한 그라디언트를 계산합니다.
[5] 지수와 지수 함수
지수는 어떤 수를 몇 번 곱하는지를 나타내는 표현 방식입니다. 예를 들어, a라는 수를 n번 곱하는 것을 a의 n제곱이라고 하며, a^n으로 표기합니다.
a^n=a×a×a×⋯×a(n번) |
- 여기서 a는 밑(base) n은 지수(exponent)입니다.
지수 함수는 밑이 상수이고 지수가 변수인 함수입니다. 일반적인 형태는 다음과 같습니다:
$$ f(x) = a^x $$
여기서 a는 상수(밑)이며, x는 지수(변수)입니다. 가장 흔히 사용되는 지수 함수는 밑이 자연상수 e인 함수입니다.
- 모델의 출력 확률을 계산할 때 소프트맥스(Softmax) 함수에서 사용됩니다.
- 자연로그와 함께 손실 함수(크로스 엔트로피 등)에서 사용됩니다.
[6] 시그모이드 함수
시그모이드 함수: S자 형태의 비선형 함수로, 식은 σ(x)=1/(1+e^-x)입니다. 출력값은 (0, 1) 범위에 속합니다.
- 이진 분류 문제에서 출력층의 활성화 함수로 사용됩니다.
- 신경망에서 비선형성을 도입하여 복잡한 패턴을 학습하게 합니다.
[7] 로그와 로그 함수
- 로그 함수: 지수 함수의 역함수로, y=logb(x) 형태입니다. 보통 자연 로그 ln(x)가 자주 사용됩니다.
- 크로스 엔트로피 손실 함수에서 사용됩니다.
- 확률 값을 안정적으로 계산할 때 사용되며, 수치적 안정성을 높입니다.
'Python > [모두의 딥러닝]' 카테고리의 다른 글
[모두의 딥러닝] #1. 딥러닝 시작을 위한 준비 운동 (2) | 2024.12.26 |
---|---|
[모두의 딥러닝] #2. 딥러닝의 동작 원리 (0) | 2024.08.13 |