1. 딥러닝
인공지능 > 머신러닝 > 딥러닝
- 머신러닝 : 데이터를 이용해 앞 일을 예측.
- 인공지능의 큰 범주 안에 머신러닝
point : 딥러닝을 배우려면 머신러닝의 기초 개념을 알아야 한다.
1#-1. 딥러닝을 이용해 할 수 있는 것은????????
- 수술 환자의 사망률 예측
- 아이리스 품종 분류
- 손글씨 판별
이미 다양한 곳에서 인공지능이 활용되고 있다.
2. 케라스와 텐서플로우
- 딥러닝은 케라스(keras)를 사용해 실행 시킨다.
- 케라스는 텐서플로(tensorFlow)가 먼저 설치되어 있어야 한다.
- 딥러닝 프로젝트 == '여행' 비유에 본다면
- 텐서플로는 목적지까지 빠르게 이동시켜주는 비행기
- 케라스는 비행기의 이륙 및 정확한 지점까지의 도착을 책임지는 파일럿
Sequential() 함수
▶ 딥러닝의 구조를 한 층 한 층 쉽게 쌓아 올릴 수 있게 해 준다. #모델을 담는 바구니 역할.
▶ Sequential() 함수를 선언 model.add( ) 함수를 사용해 필요한 층을 차례로 추가하면 된다.
model = Sequential() #바구니
model.add(Dense(24, input_dim=60, activation='relu')) # 입력층 노드 수 60개(relu)
model.add(Dense(10, activation='relu')) # 은닉층1 노드 수 24개(relu)
# 은닉층2 노드 수 10개(relu)
model.add(Dense(1, activation='sigmoid')) # 출력층 노드 수 1개(sigmoid로 이진 분류)
# activation : 다음층으로 어떻게 값을 넘길지 결정하는 함수
2#-2 model.add( ) 함수
- 층을 몇 개 쌓을지는 데이터에 따라 그때 그때 결정한다.
- 케라스의 가장 큰 장점 중 하나는 model.add( ) 함수를 이용해 필요한 만큼의 층을 쉽게 쌓아 올린다.
- model.add( ) 함수안에는 Dense( ) 함수가 포함 (dense는 조밀하게 모여있는집합) 각 층이 제각각 어떤 특징을 가질지 옵션을 설정하는 역할
- 딥러닝의 구조와 층별 옵션 입력 완료 후 compile( ) 함수를 이용해 실행 (ex Metrics : 척도는 결과적으로 이 모델의 성능은 얼마짜리야라는 개념이다. )
출처:https://needjarvis.tistory.com/568[자비스가 필요해]
함수 정리 | 설명 | 자주 사용되는 함수 |
activation | 다음 층으로 어떻게 값을 넘길지 결정하는 부분 |
relu( ) , sigmoid( ) |
loss | 한번 신경망이 실행될 때 마다 오차 값을 추적하는함수 | 'binary_crossentropy' |
optimizer | 오차를 어떻게 줄여 나갈지 정하는 함수 | 'adam' |
입력값이 네트워크 층을 거치면 예측값이 나오고, 이를 실제값과 비교해서 Loss score을 계산한 후
Optimizer를 통해 Weight를 업데이트 한다.
★point
- 딥러닝의 수학원리를 배울 때 이 식이 등장
- x가 주어지고 원하는 y값이 있을 때 적절한 a 와 b 를 찾는 것, 딥러닝을 설명하는 가장 간단한 표현
계열 | 오차함수 종류 | 의미 | 사용처 | 특징 |
평균 제곱 계열 (Mean squared) |
MSE (Mean squared error) |
평균제곱 오차 | 회귀 문제 | 속도가 느리다는 단점 |
MAE | 평균절대 오차 | |||
MAPE | 평균절대박분율 오차 | |||
MSLE | 평균제곱로그 오차 | |||
교차 엔트로피 계열 (Cross-entropy) |
categorical_crossentropy | 범주형 교차 엔트로피 |
다중 클래스 분류 | 장점: 출력 값에 로그를 취해서 오차가 커지면 수렴 속도 증가, 오차가 작아지면 수렴속도 감소 |
binary_crossentropy | 이항 교차 엔트로피 |
이중 클래스 분류 |
3. 딥러닝의 기본적인 계산 원리
딥러닝의 가장 말단에서 이루어지는 기본적인 계산 원리 2가지
1. 선형 회귀
2. 로지스틱 회귀
3#-1 선형 회귀
- 독립 변수 : 독립적으로 변할 수 있는 x값
- 종속 변수 : 독립 변수에 따라 종속적으로 변하는 값
- 선형 회귀 : 독립 변수 x를 사용해 종속 변수 y의 움직임을 예측하고 설명하는 작업
- 단순 선형 회귀 : 하나의 x값 만으로도 y값 설명 가능
- 다중 선형 회귀 : y값 설명에 x값이 여러 개 필요할 때
4.퍼셉트론
- 인간의 뇌는 약 1000억개의 뉴런으로 이루어져 있고, 뉴런과 뉴런 사이에는 시냅스라는 연결 부위 존재
- 신경 말단에서 자극을 받으면 시냅스에서 화학 물질이 나와 임계값 넘으면 전위 변화를 일으키는데, 이 매커니즘이 로지스틱 회귀와 많이 닮음.
로지스틱 회귀란?
: 회귀를 사용하여 데어터가 어떤 범주에 속할 확률을 0에서 1 사이의 값으로 예측하고 그 확률에 따라 가능성이 더 높은 범주에 속하는 것으로 분류 해주는 지도 학습 알고리즘이다.
2진 분류란?
: 데이터가 2개의 범주 중 하나에 속하도록 결정하는 것을 2진 분류(binary classification)라고 한다.
- y = ax +b( a는 기울기, b는 y 절편)
--> y = wx + b (w는 가중치, b는 바이어스)
- 가중합(weighted sum) : 입력 값 X과 가중치 w 의 곱을 모두 더한 다음 거기에 바이어스 b를 더한 값
- 활성화 함수 (activation function) : 가중합의 결과를 놓고 1 또는 0을 출력해서 다음으로 보내는데, 여기서 0과 1을 판단하는 함수 (sigmoid 함수 , relu함수, softmax함수 등 )
4#-1 XOR문제(1969년) 퍼셉트론의 과제
AND게이트 : x1, x2 둘 다 1일 때만 결과값이 1로 출력되는 게이트
XOR게이트 : 둘 중 하나만 1일 때만 결과값이 1로 출력되는 게이트
OR게이트 : x1, x2 둘 중 하나라도 1이면 결과값이 1로 출력되는 게이트
XOR의 경우 선을 그어 구분 할 수 없음. ----> 해결책 : 다층 퍼셉트론
4#-2 다층 퍼셉트론
- 차원의 변화
5. 기울기 소실 문제
- 가중치를 수정하려면 미분 값, 즉 기울기가 필요하다고 배웠는데, 층이 늘어나면서 기울기 값이 점점 작아져 맨 처음 층까지 전달되지 않는 기울기 소실 문제 발생
- 기울기 소실 문제가 발생하기 시작한 것은 활성화 함수로 사용된 시그모이드 함수의 특성 때문이다.
- 여러 층을 거칠수록 기울기가 사라져 가중치를 수정하기가 어려워지는 것임
- 활성화 함수를 시그모이드가 아닌 다른 함수들로 대체하기 시작
6. 활성화 함수 종류
6-1. 활성화 함수 설명
7. 고급 경사 하강법 - 확률적 경사 하강법(SGD, stochastic Gradient Descent)
- 경사 하강법은 저확하게 가중치를 찾아가지만, 전체 데이터를 미분해야 하므로 계산량이 매우 많다는 단점.
- 이러한 단점 보완한 고급 경사 하강법(SGD)이 등장하면서 딥러닝의 발전 속도는 더 빨라짐.
- 전체 데이터르 사용x , 랜덤하게 추출한 일부 데이터 사용
- 일부 데이터를 사용하므로 더 빨리 그리고 자주 업데이트가 가능
- 경사 하강법의 대안으로 사용됨.
7-1 고급 경사 하강법 - 모멘텀(momentum)
- 모멘텀 SGD란 말 그대로 경사 하강법에 탄력을 더해 주는 것
- 경사 하강법과 마찬가지로 매번 기울기를 구하지만, 이를 통해 오차를 수정하기 전 바로 앞 수정 값과 방향(+,-)을 참고하여 같은 방향으로 일정한 비율만 수정되게 하는 방법
- 지그재그 현상이 줄어들고, 이전 이동 값을 고려하여 일정 비율만큼만 다음 값을 결정함으로 관상의 효과를 낼 수 있음.
7-2 고급 경사 하강법- 아담(Adam)
: 모멘텀과 알엠에스프롭 방법을 합친 방법(모멘텀 + 알엠에스프롭(RMSProp)
정확도와 보폭 크기 개선
8. 과적합(overfitting)
:모델이 학습 데이터셋에서는 어느 정도 예측 정확도를 보이지만, 새로운 데이터에 적용하면 잘 맞지 않는 것
- 과적합은 층이 너무 많을 때, 변수가 복잡할 때, 테스트셋과 학습셋이 중복될 때 생기기도 함
- 딥러닝은 학습 단계에서 입력층, 은닉층, 출력층의 노드들에 상당히 많은 변수들이 투입됨
8-1.과적합 판단
:학습이 깊어져서 학습셋의 정확도는 높아져도 검증셋에서 효과가 없다면 과적합 발생으로 판단
9. 모델 저장과 재사용
학습이 끝난 후 결과가 만족스러울 때 이를 모델로 저장하여 새로운 데이터에 사용 가능.
model.fit(X_train, Y_train, epochs = 130, batch_size = 5)
modal.save('my_model.h5)
#저장된 모델 로드
model = load_model('my_model.h5)
10. K겹 교차 검증
- 알고리즘을 충분히 테스트 하였어도 데이터가 충분치 않으면 좋은 결과를 내기가 어렵다.
- 이러한 단점을 보완하고자 만든 방법 K겹 교차 검증(k-fold cross validation)
- k겹 교차 검증 : 학습 데이터를 여러 개로 나누어 하나씩 검증셋으로 사용하고 나머지를 모두 합해서 학습셋으로 사용하는 방법
- 이렇게 하면 가지고 있는 데이터의 100퍼센트 검증셋으로 사용할 수 있다.
-
# kfold 교차 검증 n_fold = 10 skf = StratifiedKFold(n_splits=n_fold, shuffle=True, random_state=seed)
11. 모델 저장 폴더 만들기
MODEL_DIR = './model/'
if not os.path.exists(MODEL_DIR):
os.mkdir(MODEL_DIR)
modelpath="./model/{epoch:02d}-{val_loss:.4f}.hdf5"
11-1 모델 업데이트 및 저장
# 모델 업데이트 및 저장
checkpointer = ModelCheckpoint(filepath=modelpath, monitor='val_loss', verbose=1, save_best_only=True)
# 학습 자동 중단 설정
early_stopping_callback = EarlyStopping(monitor='val_loss', patience=100)
12. 이미지 인식 컨볼루션 신경망CNN( Convolution Neural Net)
- 컨볼루션 신경망(CNN) : 입력된 이미지에서 다시 한번 특징을 추출하기 위해 마스크(=필터, 윈도, 커널)을 도입하는 기법
- 새롭게 만들어진 층을 컨볼루션(합성곱)이라고 부름
- 컨볼루션을 만들면 입력 데이터로 부터 더욱 정교한 특징을 추출 할 수 있음.
12-1 여러개의 컨볼루션 만들기.
- 새롭게 만들어진 층을 컨볼루션(합성곱)이라고 부름
- 컨볼루션을 만들면 입력 데이터로부터 정교한 특징 추출
- 이러한 필터를 여러 개 만들 경우 여러 개의 컨볼루션이 만들어짐
12-2 맥스 풀링
풀링(pooling) 또는 서브 샘플링(sub sampling)
: 컨볼루션 층을 통해 이미지 특징을 도출할 때, 그결과가 여전히 크고 복잡하면 다시 한번 축소 하는 과정
(꼭 필요한 내용만 간추리는 과정)
12-3 드롭 아웃
- 딥러닝 학습을 실행할 때 가장 중요한 것은 과적합을 얼마나 효과적으로 피해가는지 달려있다.
- 드롭 아웃(drop out) : 은닉층에 배치된 노드 중 일부를 임의로 꺼줘서 과적합 방지.
- 랜덤하게 노드를 끔으로써 학습데이터에 지나치게 학습되는 과적합을 막을 수 있다.
-
model = Sequential() model.add(Conv2D(32, kernel_size=(3, 3), input_shape=(28, 28, 1), activation='relu')) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=2)) model.add(Dropout(0.25)) #과적합 방지 일부 노드를 사용하지 않는다. 과도한 데이터 학습을 막기 위함. model.add(Flatten()) #1차원으로 바꿔주는 함수 model.add(Dense(128, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(10, activation='softmax'))
13. 딥러닝을 이용한 자연어 처리
- 인공지능 비서 서비스를 누구나 사용하는 시대가 올 것
- 자연어 처리 (NLP, Natural Language Processing): 음성이나 텍스트를 컴퓨터가 인식하고 처리하는것
- AI스피커 : 애플 시리, 구글 어시스턴트, 아마존 엘렉사, SK Nugu, 네이버 클로바
- 딥러닝이 등장하면서 자연어 처리 연구가 활발해짐(대용량 데이터를 학습할 수 있는 딥러닝의 속성때문)
- 컴퓨터는 수치 데이터만 이해할 수 있기 때문에, 자연어처리는 텍스트 전처리 과정이 필수
13-1 텍스트의 토큰화
- 먼저 해야 할일은 텍스트(문장)을 잘게 나누는 것
- 토큰(token) : 텍스트(문장)를 단어별, 문장별, 형태ㅗ별로 나눌 수 있는데, 나누어져서 의미가 있는 단위
- 토큰화(tokenization) : 입력된 텍스트를 나누는 과정
13-2 문장의 원 핫 인코딩 워드 임베딩(word embedding)
- 공간적 낭비를 해결하기 위해 등장한 것이 단어 임베딩(word embedding)이라는 방법
- 단어 임베딩은 주어진 배열을 정해진 길이로 압축 시킨다.
13-3 워드 임베딩 - Embedding() 함수
- 워드 임베딩으로 얻은 결과는 밀집된 정보를 가지고 있음
- 워드 임베딩을 이용해서 각 단어 간의 유사도를 계산할 수 있음
Embedding(16, 4) : 입력될 총 단어 수는 16, #임베딩 후 출력되는 벡터 크기 4
Embedding(16, 4, input_length = 2) : #총 입력되는 단어 수는 16개, 임베딩 후 출력되는 벡터 크기=4
#단어를 매번 2개씩 집어 넣겠다는 뜻.
13-4 패딩(padding)
- 문장의 단어 수를 똑같이 맞춰 주는 작업
- pad_sequnce() 함수 : 원하는 길이보다 짧은 부분은 숫자 0을 넣어서 채어주고, 긴 데이터는 잘라줌
-
# 패딩, 서로 다른 길이의 데이터를 4로 맞추어 준다. padded_x = pad_sequences(x, 4)
'딥러닝 > 이론 정리' 카테고리의 다른 글
BPE알고리즘 과 텍스트 전처리 과정 (0) | 2021.08.05 |
---|---|
NLP의 기본 자연어 처리 (0) | 2021.08.02 |
파이토치 오토인코더 이론에 대해 알아보자 (0) | 2021.07.30 |
원 핫 인코딩의 한계와 Vector Embeding의 필요성 (0) | 2021.07.30 |
딥러닝 입문( DNN 이진분류) (0) | 2021.07.22 |
댓글