티스토리 뷰

딥러닝

deep learning with keras

shannon. 2024. 1. 2. 18:27
반응형

 pip install numpy pillow matplotlib ipython tensorflow tensorflow_hub imageio

 

 

 

Activation Function  활성화 함수

뉴런은 0 또는 1 두가지 값만 출력할 수 있는 기계

작은 숫자를 입력받으면 0에 가까운 숫자를 출력하고, 어느 정도 큰 숫자를 입력받으면 1에 가까운 숫자를 출력함

  1. 시그모이드 함수: 0~1 사이로
  2. 하이퍼볼릭 탄젠트 함수 -1~1 사잇값 탄젠트는 원점을 기준으로 대칭
  3. 렐루  ReLu : 0보다 작은 값은 0으로 만들고, 0보다 큰 값은 그대로 출력. 단일 뉴런 보다는 여러 개의 뉴런으로 구성된 신경 다발의 정보전달 형상. 기술기 소실문제 해결에도 사용
  4. 리키 렐루> 0 보다 작은 값을 버리지는 않고 원본 그대로 출력하지 않고 약간 더 작은 값을 출력하도록 함.

 

가중치 결정

딥러닝에서는 맨 처음에 가중치를 랜덤으로 결정하고, 이후 역전파라는 알고리즘을 적용하여 퍼셉트론이 입력값을 목표값과 잘 매칭시킬 수 있도록 조금씩 가중치를 수정해 나감. 

좋은 데이터를 많이 가지고 있으면 가중치를 더욱 잘 수정할 수 있게 됨.

데이터를 분석해 가중치를 수정해 나가는 과정을 학습이라고 함.

 

역전파: 출력층부터 거꾸로 내려오면서 가중치를 수정하는 알고리즘. 오차를 가중치로 미분한 값을 토대로 신경망의 가중치를 수정함 Backpropagation

 

다층 퍼셉트론 Feedforward Neural Network 

 

분류에 사용하는 활성화 함수, Softmax

뉴런의 행동을 모사하기 보다는 분류 문제에서 확률 질량 함수의 정규화를 위해 사용함.

신경망의 출력값은 숫자에 지나지 않지만, 소프트맥스 연산을 거치면 비로소 확률 질량 함수로서 의미를 가지게 됨.

 

 

컴파일시, Optimzer, loss, metrics세가지 정보를 함께 입력해야됨

model.compile(optimizer = "adam", metrics=["accuracy"], loss="sparse_categorical_crossentropy")

옵티마이저는 인공신경망의 가중치를 조절하기 위한 알고리즘, 대부분 adam사용

로스: 인공신경망을 학습시키기 위한 기준이 되는 함수, 작을수록 성능이 높고, 높을 수록 성능이 낮다.

분류문제는 Cross-entropy를 사용

회귀에서는 mse

metrics는 성능 검증을 위한 척도를 의미. accuracy,,, 이외 선택가능

 

2)콜백: 학습을 조기에 중단하기 위한 도구

학습을 중단시키기 위해 사용하는 기능으로, 에포크를 너무 높게 설정하면 오버피팅 등의 현상이 발생하며, 오히려 성능이 떨어지는 경우가 발생할 수도 있음.

반복학습을 너무 많이 해서 발생하는 오버피팅을 방지하려면 인공지능의 성능이 적당히 상승했을 때 학습을 중단할 필요가 있다.

“콜백”이 바로 이러한 역할을 수행해주는 기능

early_stop = keras.callback.EarlyStopping(monitor="val_loss", patience=10)

Monitor:학습을 조기 중단하기 위한 기준으로 삼을 지표

val_loss: 검증과정의 ‘로스’를 의미. 성능검증을 실시하고, 로스가 딱히 개선되지 않는다면 학습을 중단하라.

patience : 숫자. 10 에포크가 지나가도록 성능개선이 없으면 중단하겠다.

patience가 너무 크면 중단시점에서 성능이 나쁠 수 있으며, 너무 짧으면 충분한 학습이 진행되기 전에 학습이 종료되어 버릴 수도 있다.

 

history = model.fit(dr.train_X, dr.train_Y, epochs = EPOCHS, validation_data = (dr.test_X, dr.test_Y), callbacks=[early_stop])

 

validation_data= 테스트 데이터

 

학습 결과 출력

data_reader.draw_graph(history)

 

 

하이퍼파라미터: 뉴럴 네트워크의 층수, 각 층에 포함된 퍼셉트론의 개수, 에포크 등 인공지능을 제작할 때 인간이 직접 지정해 주는 값을 하이퍼 파라미터라고 함.

 

오버피팅, 언더피팅:

모델의 varience분산에 비해 데이터의 규모가 작을수록 오버피팅이 쉽게 발생함. 데이터의 규모가 모자라면 퍼셉트론의 개수를 줄이거나 층수를 낮춰서 모델의 varience를 낮춰줘야 함. 또한, 모델을 너무 오랜 에포크 동안 학습시켜도 오버피팅이 발생할 수 있다.

 

dropout

신경 일부를 버림. rate=0.5학습마다 임의로 50%의 퍼셉트론을 선택하여 드롭아웃 대상으로 선정. 드롭아웃 대상은 매번 임의로 선택됨. 드롭아웃 대상으로 지정된 퍼셉트론은 잠시동안 가중치가 0으로 설정되어 다른 퍼셉트론으로 정보를 전달하지 못하게 됨.

드롭아웃을 적용하면 오버피팅이 방지되는 효과가 있음“매번 신경망의 형태가 변형되므로 앙상블 기법과 유사하게 학습의 일반화에 유리해짐.”

완성된 인공지능에 드롭아웃을 추가하면 갑작스레 성능이 향상되는 경우가 있음. 하지만 계산 시간이 늘어남. 학습결과를 살펴보며 오버피팅이 발생하지 않았다면 굳이 드롭아웃을 적용할 필요는 없음.

dropout도 인간이 조정할 수 있는 값이므로 하이퍼 파라미터에 해당됨.

 

 

앙상블 학습

드롭아웃은 앙상블과 유사한 효과가 있어 오버피팅을 피할 수 있다 -> 앙상블은 하나의 문제를 해결하기 위해 여러 개의 모델을 학습시키는 것을 의미함.

앙상블 기법을 활용할 때는 동일한 알고리즘 모델을 여러개 학습시키는 방법도 있고, 여러 종류의 알고리즘을 각각 학습시키는 방법도 있다. 결과적으로 하나의 데이터로 여러 개의 인공지능을 제작한다는 점에 차이가 없음.

이렇게 제작된 인공지능들이 각각 제안한 의견들을 어떻게 취합하는지에 따라 앙상블 기법이 또다시 나뉘기도 함.

다수의결의 원칙에 따라 AI의 의견을 투표로 취합하는 voting기법이 가장 쉬운 방법

드롭아웃을 적용하게 되면 매번 임의의 퍼셉트론이 제외되면서 매번 조금씩 다른 형태의 신경망이 학습됨. 이런 모습이 마치 서로 다른 여러 개의 모델을 학습시키는 앙상블과 유사하다고 평가되는 이유임.

 

 

 

Regression. 

경제학에서 미래를 예측하기 위해 사용하는 추세외삽법 trend extrapolation 도 회귀의 일종

과거를 분석해 일종의 추세나 경향성을 추론하고, 미래의 값을 예측하는 기법. 학습에 사용한 데이터의 구간 바깥족 값을 예측하기 위한 기법을 의미.

 

AI는 체격만 보고 체중을 추론할 수 있을까?

extrapolation, interpolation

외삽과 내삽

 

 

FNN활용

20000개 피처- > 2048, dropout -> 256 -> dropout -> 4 softmax

총4개의 암 카테고리로 구분

분류문제->softmax

 

 

CIFAR10, MNIST는 데이터셋

https://paperswithcode.com/sota/image-classification-on-cifar-10

 

시각정보 학습 CNN

퍼셉트론: 인간의 뇌세포를 흉내내는 기계이며, 퍼셉트론 레이어를 여러 층 쌓아 올리는 것은 인간의 뇌를 모방하기 위한 것임. 완벽하지는 않음.

 

CNN 하이퍼 파라미터 조정

CNN에 익숙해지는 가장 빠른 방법은 CNN하이퍼 파라미터를 이리저리 조정해 보는 것.

 * CNN 레이어들의 필터 개수를 조절

 * CNN레이어들의 필터 크기를 바꿈

  • CNN레이어의 개수를 변경
  • 풀링 레이어를 일부 제거

 

1층 CNN, 32(3,3)

batchNorm - Relu

MaxPool(2,2)

2층CNN, 64(3,3)

BatchNorm, - Relu

MaxPool (2,2)

3층 CNN 64, (3,3)

BatchNorm, - Relu

MaxPool

4층 Flatten

5층 FNN 128 Relu

DropOut, rate=0.5

FNN 10 Softmax

CNN --> 필터의 개수, 필터의 사이즈

1층의 경우 필터의 개수는 32개, 크기는 3,3

2,3층 필터의 개수가 64개, 필터 크기 3,3

CNN-배치 노멀라이즈-활성화 함수 -풀링

 

 

model.compile(optimizer="adam", metrics=["accuracy"], loss="binary_crossentropy")

binary_crossentropy는 분류 대상이 2종류뿐일 때 사용하기 좋은 크로스 엔프로피 로스

 

테스트 로스가 트레이닝 로스보다 낮은 경우, 오버피팅 없이 학습이 잘 된 것임.

 

MaxPool, 풀링 레이어라는 도구, 이미지의 사이즈를 줄기이 위해 사용

Flatten : 각 층의 CNN의 필터가 적용된 이미지를 출력하고, 2차원 데이터이므로 FNN에 바로 입력이 불가능하기에 flatten레이어를 적용해야 CNN출력물을 FNN으로 입력가능

 

 

CNN은 이미지 정보를 축소함

필터를 적용한 이미지의 사이즈가 원본보다 작아지기 때문임.

CNN의 반대인 DCNN, TCNN도 있음. Deconvolutional Neural Network, Transpose Convolutional Neural Network

DCNN은 이미지를 확대하는 용도로 사용

 

CNN을 이용ㅎ아여 이미지를 압축하고, 다시 DCNN을 활용하여 이미지를 확대하는 방식이 의외로 굉장히 많이 사용됨.

이러한 시도는 사진의 노이즈를 제거하거나, 저화질 이미지를 고화질 이미지로 변환하는 등 이미지를 입력해 이미지를 출력하는 AI를 만들 때 유용함.

CNN을 활용하여, 이미지의 크기를 압축하는 과정을 인코더(encoder)라고부르고, DCNN등을활용하여 이미지의 크기를 다시 확장하는 디코더라고 부름.

U-Net인코더 -디코더 구조

 

Stride를 CNN에서 적용하면 이미지 크기가 줄어들고 DCNN에서는 늘어남.

 

저화질 이미지를 -> 고화질 이미지로 변환 Gan-D?

목소리 변조

흰 말을 얼룩말로?

 

U-Net은 의료영상의 세그멘티이션(분할)을 위해 고안된 딥러닝 알고리즘.

콜백이 10 에퐄으로 지정되어있고, 당장 성능향상이 멈추더라도 10에포크 가량 지켜보겠다는 의미.

 오버피팅이 진행되는 중에도 10 에포크 가 불필요한 학습을 더 진행.

콜백의 patience를수정하여 오버피팅을 줄여보자-> Patience를 줄이면 학습이 더 빨라짐

 

epoch를줄이거나 call back patience를 줄여서 학습조기종료 

성능이 미미할 때

http://needleworm.github.io/bhban_ai

Non-negative Matrix Factorization 

행렬 하나를 여러개의 행렬 곱으로 분할/ 음수 사용 금지

--> 현실의 데이터들이 여러 피처로 분할됨 NMF, 음수 미포함 행렬 분해

암세포 / 정상세포 영상에서 구분 tumor purity

반응형

'딥러닝' 카테고리의 다른 글

torch, book  (0) 2024.01.12
Gen AI 소개  (1) 2024.01.06
chatGPT4 using open ai  (0) 2023.12.31
u-net  (0) 2023.12.30
Mastering-Image-Segmentation-With-PyTorch-using-Real-World-Projects  (0) 2023.12.25
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함