지금은마라톤중

멋사 AI스쿨 TIL - (30) 본문

멋쟁이사자처럼/Python

멋사 AI스쿨 TIL - (30)

Ojungii 2023. 4. 18. 22:39

2023.04.11

 

 

질문🙋🏻‍♂️: 네트워크를 깊게 쌓으면 대체적으로 성능이 좋아집니다. 하지만 어떤 문제가 발생할까요?
과적합문제 발생

 

 

질문🙋🏻‍♂️: 과적합 문제가 발생하면 어떤 방법으로 해결할 수 있을까요?
dropout을 사용

 

질문🙋🏻‍♂️: 모델을 개선해 보는 방법 ?
레이어, 유닛 수 변경하기 
Dropout 사용하기 
early_stop 값 조정하기 
epoch 조정하기 
learning_rate 조정하기 
batch 사용하기

 

 

질문🙋🏻‍♂️: 기울기소실 문제는 네트워크를 깊게 쌓았을 때 back propagation 과정에서 발생합니다.
이 문제는 어떻게 해결했을까요?

0보다 작은 같이 많으면 Leaky Relu
0보다 작은 같이 적으면  Relu

 

 

● 딥러닝에서 사용하는 대표적인 활성화함수

Sigmoid

- Logistic 함수

- 입력 데이터를 0과 1 사이의 값으로 출력하는 미분가능한 연속성을 가진 함수

ReLU

- 음수 값은 버리고 양수는 y=x 형태로 입력 값을 그대로 출력하는 함수

- x > 0 이면 기울기가 1인 직선이고 x<0 이면 함수값이 0이된다.

Tanh

- 입력 데이터를 -1 과 1 사이의 값​으로 데이터의 평균이 0이다.

- 함수의 중심값을 0으로 옮겨 sigmoid의 최적화 과정이 느려지는 문제를 해결

 

 

질문🙋🏻‍♂️: 만약 출력 층을 sigmoid에서 softmax 로 변경하고자 한다면 출력층의 units 수를 어떻게 변경해야 할까요?
2개입니다

그럼 출력이 2개로 나올 텐데 둘 중에 어떤 값을 선택할지 넘파이의 어떤 기능으로 찾을까요?
argmax 입니다.

 

 

  input_shape 를 쓸 때 이미지든, 정형이든 실수를 많이 할 것 같다면

 첫번째 데이터를 가져와서 해당 데이터의 shape 를 그대로 넣어주면 실수를 줄일 수 있습니다.

X_train.iloc[0].shape

 

질문🙋🏻‍♂️: X_train.shape[1] 보다 X_train.iloc[0].shape으로 하는게 낫나요? 아님 똑같나요?
똑같습니다
feature의 수를 넣어주는 것은 똑같습니다! 정형데이터가 아니라 이미지 데이터 일 때는 shape가 달라져서 첫번째 데이터 가져와서 그대로 넣어주는게 실수를 줄일 수 있습니다.


예를 들어 MNIST, FMNIST 는 흑백 채널 1개의 2차원이라서 X_train 의 0번째 데이터의 shape를 넣으면 오류를 줄일 수 있습니다. CNN 에서는 컬러이미지를 사용할 예정인데 이 때는 흑백과 shape가 다릅니다. 그래서 여러 상황을 고려하기 보다는 X_train 의 0번째 데이터의 shape 사용한다고 생각하는게 가장 쉽습니다

 

 

질문🙋🏻‍♂️: tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=100) monitor 의 값을 loss 했을 때 문제점?
1) Overfitting이 감지되지 않을 수 있습니다. 
2) Early Stopping이 올바르게 동작하지 않을 수 있습니다

 

질문🙋🏻‍♂️: 예제보다 성능을 더 올릴 수 있는 방법 ? 
1) feature의 스케일을 조정해줄 수 있습니다. 
2) 레이어를 줄이거나 늘려줍니다. 
3) Dropout 을 사용해봅니다. 
4) early_stop 값을 조정해봅니다 
5) epoch를 조정해봅니다.
6) batch를 사용해봅니다. 
7) 옵티마이저 ( learning_rate ) , Units의 수를 변경해봅니다

 

 

질문🙋🏻‍♂️:Standard Scailing과 Normalization의 차이가 궁급합니다.
Standard Scaling은 특성의 평균을 0으로, 표준 편차를 1로 맞추는 방법이지만 
Normalization은 특성의 스케일을 0과 1 사이로 조정하는 방법입니다
정규화는 광범위하게 머신러닝 모델이 이해할 수 있는 형태로 수치 데이터를 가공하는 방법을 의미합니다. 
텍스트데이터에서 형태소 분석을 통해 텍스트 데이터 전처리 등을 하는 것도 정규화라고 부릅니다

 

 

 Batch Norm

Batch Norm은 활성화 함수의 입력값에 대한 분포를 정규화하여 활성화 함수의 성질을 보존합니다 !

따라서 , 층의 출력값이 정규화(normalize)되면서 조금 더 안정적인 학습을 돕는 역할을 수행합니다 !

+) 각 층의 출력값을 정규화해주는 역할을 수행하기 때문에 신경망 모델 내에서 활성화 함수 바로 이전에 추가합니다

 

 

 옵티마이저 -> RMSprop

옵티마이저는 모델 학습 시 손실 함숫값을 최소화하는 방향으로 모델의 가중치 값을 갱신하기 위한 전략을 결정!

RMSprop은 학습률이 급격하게 감소하는 현상을 방지할 수 있는 장점이 있다고 합니다.

 

 

질문🙋🏻‍♂️: BatchNormalization 을 제외한 이유가 무엇일까요?
대부분의 값이 바이너리 값이라서 BatchNormalization 을 제외했습니다

 

질문🙋🏻‍♂️: tf.keras.layers.Dense(units=512, activation='relu', input_shape=X_train.iloc[0].shape),
여기에서 input_shape이 (376,)인데 units=512라고 해도 되나요? input_shape보다 units가 커도 되는지 궁금합니다.
입력값보다 커도 상관은 없습니다. 작아도 상관은 없지만 성능은 돌려보고 낮아졌다면 다시 조정해 볼 필요가 있습니다.

 

 

질문🙋🏻‍♂️: units와 input_shape간 관계에 대해서도 추가로 설명해주실 수 있나요?
마치 트리계열 모델에서 트리를 몇 개를 만들지 정하는 파라미터 값과도 유사합니다. 
트리 계열모델이라면 데이터의 수로 만들 수 있는 트리가 정해져있습니다. 
units 도 비슷하게 어떤 값을 지정하냐에 따라 성능이 달라집니다. 
input_shape 값과 너무 큰 차이가 있다면 아니면 input_shape 값보다 너무 작은 값을 설정했다면 제대로 계산되지 않을거에요. 
적절한 값을 설정할 필요가 있습니다.
하이퍼파라미터이기 때문에 더 큰게 낫다, 작은게 낫다라기 보다는 실험을 다양하게 해보는 것을 추천합니다. 
mpg 에서는 feature 가 10개 내외였는데 첫 레이어의 units 의 수를 64개로 설정해 주었습니다.

 

 torch.FloatTensor()

: 입력된 텐서의 데이터 타입을 32비트 부동소수점(torch.float32)으로 변경

이미지, 음성, 텍스트 등 다양한 데이터를 모델 입력으로 제공하기 위해서는 데이터를 부동소수점 형태의 텐서로 변환하는 과정이 필요합니다.

-> GPU 연산을 위해 입력 가능한 형태로 바꿉니다

 

 

'멋쟁이사자처럼 > Python' 카테고리의 다른 글

멋사 AI스쿨 TIL - (32)  (0) 2023.04.18
멋사 AI스쿨 TIL - (31)  (0) 2023.04.18
멋사 AI스쿨 TIL - (29)  (0) 2023.04.18
멋사 AI스쿨 TIL - (28)  (0) 2023.04.18
멋사 AI스쿨 TIL - (27)  (0) 2023.04.18
Comments