■ 핵심 용어
1. 인공 뉴런 : 입력값과 가중치, 편햐을 이용해 출력값을 내는 수학적 모델
2. 단층 인공 신경망 : 퍼셉트론을 하나만 사용하는 인공 신경망
3. 다층 인공 신경망 : 퍼셉트론을 여러 개 사용하는 인공 신경망
4. 입력층 : 입력값을 표현하는 것 / 출력층 : 신경망의 출력을 계산하는 것 / 은닉층 : 입력층 이후부터 출력층 전
5. 가충치 : 입력의 중요도
6. 편향 : 활성화의 경계가 원점으로부터 얼마나 이동할지를 결정
7. 활성화 함수 : 해당 뉴런의 출력을 다음 뉴런으로 넘길지 결정하는 것
8. 시그모이드 함수 : 뉴런의 출력값을 0과 1 사이로 고정하는 것
9. 손실 함수 : 정답과 신경망의 예측의 차이를 나타내는 함수이다.
10. 경사 하강법 : 손실을 가중치에 대해 미분한 다음, 기울기의 반대 방향으로 학습률만큼 이동시키는 알고리즘
11. 오차 역전파 : 올바른 가중치를 찾기 위해 오차를 출력층으로부터 입력층까지 전파하는 방식
① 입력값(x₁, x₂)에 대응하는 가중치(w₁, w₂)를 각각 곱한다.
② ∑ 는 편항 : x₁ * w₁ + x₂ * w₂ + b
③ F 활성화 함수
④ 시그모이드 함수는 실수 전체의 모든 입력에 대해 출력이 0과 1 사이의 실수만을 가지게 된다. 시그모이드 함수는 인공 신경망의 출력을 확률로써 다루고 싶어한다. 이에 확률 또한 값이 0과 1사이로 표현하기 때문에 시그모이드 함수를 사용한다.
TensorFlow 기본 구조
TensorFlow의 핵심 개념
텐서(Tensor) | - TensorFlow의 기본 데이터 구조로, 다차원 배열 - 스칼라 (0차원 텐서) : 3 - 벡터 (1차원 텐서) : [1, 2, 3] - 행렬 (2차원 텐서) : [ [1, 2], [3, 4] ] |
연산 (Operation) | - 텐서 간의 연산을 수행하는 노드 - 텐서는 연산을 거치면서 모델 학습에 필요한 변환을 수행 |
그래프 (Graph) & 세션 (Session) | - 과거에는 연산을 수행하기 위해 계산 그래프를 먼저 정의하고, 세션에서 실행하는 방식 |
TensorFlow 기본 구조
라이브러리 로딩 | 텐서플로우 라이브러리를 로딩한다. | # 데이터 처리 라이브러리 불러오기 import tensorflow as tf import pandas as pd import numpy as np # 텐서플로우 API 불러오기 from tensorflow.keras import Sequential from tensorflow.keras import Dense |
데이터 로드 | 학습을 위한 준비한 데이터셋을 가져옴 | x = [ -3, 31, -11, 4, 0, 22, -2, -5 ] y = [ -2, 32, -10, 5, 1, 23, -1, -4 ] # 신경망 모델의 입력은 (샘플 수, 특성 수) 형태의 2차원 배열이다. # 만약 1차원 (10,) 형태라면 모델은 학습할 수 없으므로, 넘파이의 reshape()으로 2차원 배열로 변환한다. # reshape(-1, 1)은 샘플 수는 자동으로 맞추고, 특성 수가 1개 라는 것을 명시한다. X_train = np.array(x).reshape(-1, 1) Y_train = np.array(y) |
모델 구조 정의 | tf.keras.Sequential을 사용하여 신경망 모델 구조 정의 | Sequential은 층을 하나씩 순서대로 쌓는 구조로 완전 연결층 (모든 입력이 출력과 연결됨)인 Dense를 이용해 레이어를 쌓는다. - units = 1 : 출력 뉴런 1개 - activation = 'linear' : 선형 함수 사용 (회귀 모델 적합) - input_dim = 1 : 입력 데이터의 특성(열) 수가 1개 # Sequential API를 이용한 모델 구조 정의 model = Sequential() model.add(Dense(units = 1, activation = 'linear', input_dim = 1)) |
컴파일 | compile 함수로 모델의 손실 함수와 최적화 알고리즘, 평가 지표 등을 지정 | 생성형 모델의 학습을 위한 설정을 수행한다. - optimizer = 'adam' : 학습 방법(가중치를 어떻게 조정할지) - loss = 'mse' : 회귀 모델의 손실 함수 (예측값과 실제값의 차이 측정, 평균 제곱 오차) - metrics = ['mae'] : 학습 성능 확인용 지표 (평균 절대 오차) # 모델 컴파일하기 model.compile(optimizer = 'adam', loss = 'mse', metrics = ['mae']) |
모델 학습 | fit 함수를 활용해 모델에 데이터를 학습 | 실제 훈련용 데이터를 이용해 가중치를 조정하는 과정 - X_train : 훈련을 위한 데이터 셋 - Y_train : 정답 데이터 셋 - epochs = 3000 : 데이터 셋을 3000번 반복해서 학습 - verbose = 0 : 학습 중 출력 생략 (0이면 조용하게, 1이면 자세하게) # 모델 학습 model.fit (X_train, Y_train, epochs = 3000, verbose = 0) # 모델 가중치 확인 model.weights |
모델 평가 | evalute 함수를 사용하여 모델의 성능 평가하는 과정 | loss, mae = model.evaluate (X_train, y_train, verbose = 0) print(loss) print(mae) |
예측 수행 | 학습 완료된 모델에 predict 함수를 통해 새로운 데이터 예측 실행 | # 예측에 사용할 새 입력값 준비 # 예측할 입력값은 반드시 넘파이 배열 행태로 전달해야 모델이 NumPy 배열을 올바르게 인식하고 예측을 수행 predictions = model.predict (np.array( [[11], [12], [13]]) print(predictions.flatten()) |
딥러닝 프로세스
데이터 불러오기 | CSV, 이미지, 텍스트 등 다양한 형태의 데이터를 로딩합니다. |
EDA (탐색적 데이터 분석) | 변수의 분포, 상관관계, 이상치 등을 시각화하고 이해하는 과정 |
데이터 전처리 | 결측치를 제거하고, 범주형 데이터를 숫자형으로 변환하고 수치형 데이터의 스케일링을 수행합니다. |
데이터 셋 분리 | 학습용 (Train) 와 테스트용 (Test) 데이터로 분할합니다. |
모델 구조 정의 | 입력층 → 은닉층(Dense, Dropout) → 출력층을 구성합니다. |
모델 컴파일 | 손실함수, 옵티마이저, 평가지표 설정합니다. |
모델 학습 | .fit() 메서드로 모델을 학습한다. Validation_split 또는 별도 검증셋 활용이 가능하다. |
예측 및 검증 | .predict() 로 예측합니다. classfication_report, confusion_matrix 등으로 성능 평가 |
하이퍼파라미터 (Hyperparameter)
: 하이퍼파라미터는 모델이 학습하기 전에 사용자가 직접 설정해야 하는 값
: 신경망의 성능 최적화에 중요한 역할을 한다.
구분 | 항목 |
모델 구조 | 은닉층 개수 뉴런 개수 활성화 함수 |
최적화, 정규화 | 옵티마이저 (Optimizer) 드롭아웃 (Drop out) |
학습 | 학습률 (Learning Rate, a) 배치크기 (Batch Size) 에포크 (Epoch) |
회귀 예측 모델링
필요한 라이브러리 가져오기 | # 데이터 파일 (csv)를 불러오기 위해 pandas # 데이터를 학습용과 테스트용으로 분리하기 위한 train_test_split 함수 # 수치 데이터의 표준화를 위해 StandardScaler - import pandas as pd - from sklearn.model_selection import train_test_split - from sklearn.preprocessing import StandardScaler # 딥러닝 모델을 만들기 위한 Keras와 Sequential 과 Dense 클래스 - from tensorflow.keras.models import Sequential - from tensorflow.keras.layers import Dense |
||
데이터 로딩 | # 학습에 사용할 데이터를 가져온다. df = pd.read_csv df.info() x = df[ ['temp', 'atemp', 'hum', 'windspeed'] ].values y = df['cnt'].values |
||
데이터 전처리 - StandardScaler : 수치형 변수 값을 정규화합니다. : 각 특성(feature)의 값을 평균 0, 표준편차 1로 변환하는 작업 - 신경망은 입력 값의 스케일에 민감함 (값이 크면 더 많이 반영될 수 있다.) - 표준화를 통해 모든 특성이 동등한 중요도로 학습에 반영되도록 함 - StandardScaler (scikit - learn) 객체를 이용 |
# StandardScaler 객체를 생성한다. scaler = StandardScaler() # fit_transformed() 에 특성 데이터(x)를 넣어 표준화를 수행합니다. x_scaled = scaler.fit_transform(x) |
||
데이터셋 분리 - train_test_split() : 데이터를 모델이 학습하는 데이터와 학습하지 않은 데이터로 성능을 검증하기 위해 데이터셋을 나눕니다. - 특정 값이 많은 불균형 데이터일 경우 stratify - y 옵션을 적용함 ※ 셔플 여부, 클래스 불균형 시 Stratify 옵션 적용을 고려한다. |
x_train, x_test, y_train, y_test = train_test_split(x_scaled, y, test_size = 0.2, random_state = 42) | ||
모델 구조 정의 (하이퍼 파마리터) |
은닉층 개수 - 딥러닝 모델의 은닉층 개수가 많을수록 복잡한 패턴을 학습 가능 |
model = tf.Keras.Sequential([ tf.keras.layers.Dense(128, activation = 'relu'), tf.keras.layers.Dense(64, activation = 'relu'), tf.keras.layers.Dense(10, activation = "softmax") ]) |
|
뉴런개수 - 층당 뉴런 개수가 많으면 더 복잡한 패턴을 학습 가능하지만 과적합 가능성 증가 |
tf.keras.layers.Dense(256, activation = 'relu') # 뉴런 개수 256개로 설정 |
||
활성화 함수 - 각 뉴런의 출력을 결정하는 비선형 함수 - relu (일반적으로 사용) - sigmoid (이진 분류) - softmax (다중 클래스 분류) |
tf.keras.layers.Dense(128, activation = "relu") tf.keras.layers.Dense(10, activation = "softmax") |
||
모델 구조 정의 - Sequential, Dense를 이용해 신경망의 층을 구성한다. - Sequentail 모델은 층 (Layer)를 순서대로 쌓아 구성하는 딥러닝 ![]() |
# input_shape : 입력 특성의 수 (x_train.shape[1] = 특성개수) model = Sequential([ Dense(64, activation = 'relu', input_shape = (x_train.shape[1],)), Dense(32, activation = 'relu'), Dense(1) ]) |
||
모델 컴파일 - 문제 유형에 맞는 손실함수, 옵티마이저, 평가지표를 설정합니다. ※ 이진 분류는 binary_crossentropy, 회귀는 mse 등 손실함수를 정확히 선택한다. |
optimizer = 'adam' : 학습방법 (가중치를 어떻게 조정할지) loss = 'mse' : 손실함수 (예측값과 실제값의 차이 측정, 평균 제곱 오차) metrics = ['mae'] : 학습 성능 확인용 지표 model . compile(optimizer = 'adam', loss = 'mse', metrics = ['mae'] |
||
모델 학습 - 신경망이 중요한 특징을 학습하는 과정 - 모델에게 입력 데이터 x_train 과 정답 y_train 을 알려주고 지정한 횟수 epoch 만큼 반복해서 가중치를 조정하는 과정이다. - 학습 과정에서 실제 정답과 비교해서 오차를 계산하고 오차가 작아지도록 가중치(w)를 조정합니다. |
history = model.fit (X_train, Y_train, epochs = 100, batch_size = 16, vaildation_split = 0.2, verbose = 0)![]() |
'KT AIVLE > 데이터 분석, ML, DL' 카테고리의 다른 글
[KT AIVLE DX 트랙 7기] 미니프로젝트 1차 (0) | 2025.04.20 |
---|---|
[KT AIVLE DX 트랙 7기] 인공지능과 머신러닝 (0) | 2025.04.13 |
[KT AIVLE DX 트랙 7기] 회귀학습 & 분류학습 (0) | 2025.04.13 |
[KT AIVLE DX 트랙 7기] 인공지능과 머신러닝 (1) | 2025.04.09 |
[KT AIVLE DX 트랙 7기] 가설검증 & 이변량 분석과 시각화 (0) | 2025.04.06 |