01. 딥러닝 개요
딥러닝 : 머신러닝의 여러 방법론 중 하나로, 인공신경망에 기반하여 컴퓨터에게 사람의 사고방식을 가르치는 방법
인공신경망 : 생물학의 신경망에서 영감을 얻은 학습 알고리즘으로 사람의 신경 시스템을 모방함
# 현대의 다양한 딥러닝 기술 적용 사례
- 얼굴 인식 카메라
- 기계 번역 모델
- 알파고 제로
02. 퍼셉트론
- 신경망 이전에는 사람이 직접 패턴을 파악해서 예측하는 형태였음 (얼굴 인식, 숫자 및 문자 인식)
- 1958년 초기 신경망 퍼셉트론 등장
y = activation(w0 + w1x1 + w2x2)
- w0 : bias
- x1, x2 : 입력 값
- w1, w2 : 가중치
- 0 또는 1을 출력 → 이것을 얼마나 잘 분류하느냐가 매우 중요
- 퍼셉트론은 선형 분류기로써 데이터 분류가 가능함
03. 다층 퍼셉트론
- 비 선형적인 문제를 해결하기 위해 등장
- 단층 퍼셉트론은 입력층과 출력층만 존재하지만, 다층 퍼셉트론은 단층 퍼셉트론을 여러 층 쌓은 것을 말함
- 히든층 : 입력층과 출력층 사이의 모든 레이어
- 히든층이 많이진다면,
- 깊은 신경망이라는 의미의 '딥러닝'이라는 단어 사용
- 분류 성능이 향상하여 성능이 좋아진다는 장점이 있음
- 가중치가 너무 많아진다는 단점이 있음
- 히든층이 많이진다면,
- 히든층 : 입력층과 출력층 사이의 모든 레이어
04. 딥러닝 모델의 학습 방법
- 가중치(weight) : 노트간의 연결 강도, 신호에 대한 강도, 선으로 표시
- Node/Uint : 각 층을 구성하는 요소
- 레이어(Layer) : 모델을 구성하는 층
- 딥러닝 모델의 학습 방법
- 예측값과 실제값 간의 오차값을 최소화하기 위해 오차값을 최소화하는 모델의 인자를 찾는 알고리즘 적용
- 목적 : Loss function을 최소화하는 가중치를 찾기 위해 최적화 알고리즘 적용하는 것
- 순전파(Forwardpropagation) : 입력값을 바탕으로 출력 값을 점진적으로 계산하는 과정
- 순전파를 사용하면, 예측값과 실제값 간의 오차값을 구하여 Loss function을 구할 수 있음
- 이후, 경사하강법을 통해 최적화할 수 있음
- 모델에 따라 적절한 활성화 함수 사용이 중요함
- 계단함수
- 시그모이드
- Tanh
- ReLU
- softmax
- 경사하강법 : 가중치를 Loss function 값이 작아지도록 점진적으로 업데이트하는 방법
- 가중치는 Gradient 값을 사용하여 업데이트 수행
- Gradient 값은 각 가중치마다 정해지며, 역전파(Backpropagation)를 통해 구할 수 있음
- 역전파 : 순전파와 반대 방향으로 이루어지는 과정
- Gradient 값을 구하기 위해선 그 전단의 계산 값이 필요함
- 아래 과정을 수행하여 가중치들을 업데이트 할 수 있으며, 이를 반복하여 Loss function을 제일 작게 만드는 가중치를 구함
- 딥러닝 모델의 학습 순서
- 학습용 feature 데이터를 입력하여 예측값 구하기 (순전파)
- 예측값과 실제값 사이의 오차 구하기 (Loss 계산)
- Loss를 줄일 수 있는 가중치 업데이트 하기 (역전파)
- 1 ~ 3번을 반복하며 Loss를 최소로하는 가중치 얻기 → Loss가 계속 줄어드는데, 더 이상 줄어들지 않을때까지 반복
05. 텐서플로우로 딥러닝 구현하기
- 텐서플로우(TensorFlow) : 유연하고, 효율적이며, 확장성 있는 딥러닝 프레임워크
- 딥러닝 모델 구현 순서
- 데이터 전 처리
- 텐서플로우 딥러닝 모델은 Tensor 형태의 데이터를 입력 받음
- Tensor : 다차원 배열로서 텐서프롤우에서 사용하는 객체
- 데이터 전 처리하기 : tf.data.Dataset
# pandas를 사용하여 데이터 불러오기 df = pd. read_csv (‘data.csv') feature = df. drop (columns=[‘label']) label = df[‘label’] # tensor 형태로 데이터 변환 dataset = tf.data.Dataset.from_tensor_slices((feature.values, label.values)) # dataset의 batch 사이즈를 32 로 설정 dataset = dataset. batch(32)
- 한 번에 넣지 않고, 배치로 나누어 넣음 → 성능은 안좋을 수 있으나, 속도가 빠름. 계속 로드를 줄일 수 있음
- 딥러닝에 사용하는 데이터는 추가적인 전 처리 작업이 필요함
- Epoch : 한 번의 epoch는 전체 데이터 셋에 대해 한 번 학습을 완료한 상태
- Batch : 나눠진 데이터 셋 (보통 mini-batch라고 표현)
- iteration는 epoch를 나누어서 실행하는 횟수를 의미
- 딥러닝 모델 구축
- Keras : 텐서플로우의 패키지로 제공되는 고수준 API. 딥러닝 모델을 간단하고 빠르게 구현 가능
- 코드예시
# 모델 클래스 객체 생성 tf.keras.models.Sequential() # 모델의 각 Layer 구성 tf.keras.layers.Dense(units, activation) # units 레이어 안의 Node 의 수 # activation : 적용할 activation 함수 설정
model = tf. keras.models.Sequential([ tf.keras.layers.Dense(10, input_dim=2, 'sigmoid'), #2개의 입력 변수 , 10개의 노드 tf.keras.layers.Dense(10, sigmoid’), #10 개의 노드 tf.keras.layers.Dense(1, activation='sigmoid'), #1 개의 노드 ])
# 모델에 Layer 추가하기 [model].add(tf.keras.layers.Dense(units, activation)) # units 레이어 안의 Node 의 수 # activation : 적용할 activation 함수 설정
model =tf. keras.models.Sequential() model.add(tf.keras.layers.Dense (10, input_dim=2, activation='sigmoid’)) model.add(tf.keras.layers.Dense (10, activation='sigmoid’)) model.add(tf.keras.layers.Dense (1, activation='sigmoid’)
- 모델 학습
- 코드 예시
#모델 학습 방식을 설정하기 위한 함수 [model].compile(optimizer, loss) # optimizer : 모델 학습 최적화 방법 # loss : 손실 함수 설정 # 모델을 학습시키기 위한 함수 [model].fit(x, y) # x : 학습 데이터 (feature) # y : 학습 데이터의 label
# MSE를 loss 로 설정 , 최적화 방식은 SGD 사용 model.compile(loss='mean_squared_error', optimizer='SGD') # dataset에 저장된 데이터를 입력하고 , epochs를 100으로 설정하고 학습 model.fit(dataset, epochs=100)
- 코드 예시
- 평가 및 예측
- 코드 예시
# 모델을 평가하기 위한 메소드 [model].evaluate(x, y) # x : 테스트 데이터 # y : 테스트 데이터의 label # 모델로 예측을 수행하기 위한 함수 [model].predict(x) # x : 예측하고자 하는 데이터
# MSE를 loss 로 설정 , 최적화 방식은 SGD 사용 model.compile(loss='mean_squared_error', optimizer='SGD') # dataset에 저장된 데이터를 입력하고 , epochs 를 100 으로 설정하고 학습 model.fit(dataset, epochs=100) #모델 평가 및 예측하기 model.evaluate(X_test Y_test) predicted_labels_test = model. predict(X_test)
- 코드 예시
- 데이터 전 처리
06. 이미지 처리를 위한 데이터 전 처리
- 이미지 처리 기술 예시
- 얼굴인식 카메라
- 화질개선
- 이미지 자동 태깅
- 이미지 전 처리
- 모두 같은 크기를 갖는 이미지로 통일
- 해상도 통일
- 색 통일
- 모두 같은 크기를 갖는 이미지로 통일
07. 이미지 처리를 위한 딥러닝 모델
- 합성곱 신경망(CNN) : 작은 필터를 순환시키는 방식으로 이미지의 패턴이 아닌 특징을 중점으로 인식
- 입력 이미지의 특징을 추출, 분류하는 과정으로 동작
- 이미지에서 어떠한 특징이 있는지를 구하는 과정
- 필터가 이미지를 이동하며 새로운 이미지(피쳐맵)를 생성
- Padding : 원본 이미지의 상하좌우에 한 줄 씩 추가
- Striding : 필터를 이동시키는 거리 설정
- Pooling Layer : 이미지의 왜곡의 영향(노이즈)를 축소하는 과정
- 마지막 계층에 반드시 Softmax 활성화 함수 사용
- Convolution Layer는 특징을 찾아내고, Pooling Layer는 처리할 맵(이미지) 크기를 줄여줌 : 이를 N번 반복
- 반복할 때마다 줄어든 영역에서의 특징을 찾게 되고, 영역의 크기는 작아졌기 때문에 빠른 학습이 가능해짐
- 합성곱 신경망 기반 다양한 이미지 처리 기술
- Object detection & segmentation
- Super resolution (SR)
08. 자연어 처리를 위한 데이터 전 처리
- 자연어 처리 예시
- 기계 번역 모델
- 음성 인식
- 자연어 처리 과정
- 자연어 전 처리
- 원 상태 그대로의 자연어는 전처리 과정이 필요함
- 오류교정(Noise canceling) : 자연어 문장의 스펠링 체크 및 띄어쓰기 오류 교정
- 토큰화(Tokenizing) : 문장을 토큰으로 나누고, 토큰은 어절, 단어 등으로 목적에 따라 다르게 정의
- 불용어 제거(StopWord removal) : 불필요한 단어를 의미하는 불용어 제거
- Bag of Words : 자연어 데이터에 속해있는 단어들의 가방
- 토큰 시퀀스 : Bag of Words에서 단어에 해당되는 인덱스로 변환
- 모든 문장의 길이를 맞추기 위해 기준보다 짧은 문장에는 패딩을 수행
- 패딩(Padding) : 통일을 위해 쓸모없는 값 사용. 가장 긴 길이에 맞춤 (단, 지나치게 혼자 긴 문장은 무시)
- 원 상태 그대로의 자연어는 전처리 과정이 필요함
- 단어 표현(Word Embendding)
- 모델 적용하기(Modeling)
- 자연어 전 처리
09. 자연어 처리를 위한 딥러닝 모델
- 단어 표현(Word Embendding) : 단순하게 Bag of Words의 인덱스로 정의된 토큰들에게 의미를 부여하는 방식
- 기존 다층 퍼셉트론 신경망의 자연어 분류 방식 : 자연어 문장을 기존 MLP 모델에 적용시키기에는 한계가 있음 → 합치는 과정에서 대괄호가 사라져 관계가 사라지게 되기 때문 → RNN으로 극복
- 자연어 분류를 위한 순환 신경망(RNN) : 기존 퍼셉트론 계산과 비슷하게 X 입력 데이터를 받아 Y를 출력
- 순환 신경망의 입출력 구조
- 출력 값을 두 갈래로 나누어 신경망에게 '기억'하는 기능을 부여
- 임베딩은 토큰의 특징을 찾아내고, RNN이 전 토큰의 영향을 받으며 학습
- 순환 신경망 기반 다양한 자연어 처리 기술
- Image captioning
- Chat bot
'데이터분석 및 데이터엔지니어 > 통계 및 분석 이론 정리' 카테고리의 다른 글
기초통계정리 (2) 빈도분석 (0) | 2019.11.18 |
---|---|
기초통계정리 (1) 데이터와 통계학 (0) | 2019.11.18 |