tensorflow 를 사용할 수 있다는 기준으로 간략하게 내용 정리를 한다.
분류 기준인 FNN을 기준으로 설명한다.
AI의 대략적 구성을 보자면, 신경망을 만들고 , 준비시키고, 학습시킨다.
학습 과정을 보자면, 경사하강법 이라는 기법을 통해 학습을 진행한다.
뒤에 이어 해당 방법이 무엇인지 설명하겠다.
1. 신경망 모델
- keras.Sequential 함수를 이용해 신경망 모델을 만든다.
1.1. keras.Sequential
- 배열형태의 인자값을 받는다.
- keras.layers.Dense(숫자) 혹은 keras.layers.Dense(숫자,activation='인자값') 형태를 조합하여 구성한다.
- Dense를 이용한 신경망 조합은. 입력 - 연산 - 출력 보통 이렇게 구성이 된다.
1.2. keras.layers.Dense
- 숫자는 퍼셉트론(뉴런 신경망 같은) 개수를 의미한다.
- 입력, 출력 신경망 개수는 작다. (3개 정도?)
- 인자값으로 숫자 외에 activation 이라는 활성화 함수 명을 인자값으로 받는다.
* 퍼셉트론은 신경망 개수 이다.
* 퍼셉트론 개수 또한 여러번 돌려서 찾는 매직넘버 성격이 강하다.
1.3. activation 함수들
- relu : 선형 함수의 하나. 신경망의 은닉층 에서 많이 사용한다. 양수는 양수 그대로, 음수는 0으로 반환하다보니,
기존에 자주 쓰이던 시그모이드 함수의 기울기 소실이 없다고 한다. 또한 속도가 매우 빠르다고 한다.
- softmax : 주로 출력층에 많이 사용된다. (시그모이드 함수도). 다중 분류에서 주로 사용된다.
각 분류별 확률 계산을 하고, 해당 확률의 총합이 1이므로, 어느 분류에 속할 확률이 높은지 인지할 수
있다.
- sigmoid : 주로 출력층에 사용되며, 이진 분류에서만 사용된다. (0과 1 사이)
0과 1사이의 값만 출력되기 때문에, 아무리 큰값이 들어와도 0에 수렴하는 경우가 발생 할 수 있고
이를 기울기 소실 이라고 한다.
* 은닉층 : 입력층, 출력층 사이에 있는 모든 신경망은 은닉층이라고 한다. 연산에 사용되는 층.
keras.Sequential([
keras.layers.Dense(입력층 개수),
keras.layers.Dense(은닉층 개수, activation="relu"),
keras.layers.Dense(출력층 개수, activation='softmax')
])
2. 신경망 컴파일
- keras.Sequential.compile 함수 호출을 통해, 인자값으로 받은 신경망들을 사용 준비 상태로 컴파일을 한다.
- GPU가 있다면 GPU를 이용하고 그렇지 않으면 CPU를 이용한다.
compile 함수의 인자값을 살펴보면,
2.1. optimizer
- 경사하강법을 어떤 방법으로 사용할지 정하는 인자값이다.
- 여기에 사용되는 알고리즘에 따라 최적값을 찾아가는 속도가 많이 달라진다.
- adam이 가장 많이 사용된다.
2.1.1. GD
- 데이터의 모든값에서 기울기를 계산해서 최적값을 찾는 기초방식
2.1.2. SGD
- 데이터의 일부를 추출하여 기울기를 계산해서 최적값을 찾는 방식
2.1.3. NAG
- 관성을 부여해서, 먼저 이동을 한 후 거리를 계산
2.1.4. Momentum
- 기울기를 따라서 이동할 때 관성을 부여한다. 기울기가 높으면 더 멀리 간다.
2.1.5. Adagrad
- 가보지 않은곳은 많이 이동하고, 가본곳은 조금 이동하면서 세밀하게 살펴본다.
2.1.6. AdaDelta
- Adagrad를 보완한것으로, 가본곳을 세세하게 살필때 정지하는 현상을 방지한다.
2.1.7. RMSProp
- 가본곳을 천천히 이동하되, 이전 상황을 고려해서 수준을 결정한다.
2.1.9. Adam
- Momentum과 RMSProp의 장점을 합친것으로 관성과 가본곳을 천천히 이동한다.
adamOptimizer = keras.optimizer.Adam(learning_rate=숫자값)
keras.Sequential(..).compile(optimizer = adamOptimizer ...)
2.2. metrics
- 배열 인자값을 받는다.
- 어떤 인자값을 기준으로 인공지능 성능을 평가할 것인가? 라는 인자값이다.
- accuracy 는 정확도 기준으로 평가한다는 의미이다
2.3. loss
- 인공지능의 학습 방향을 결정하는 변수값이다.
- sparse_categorical_crossentropy는 분류인공지능에 잘 동작한다고 한다.
어떤 카테고리 분류를 잘 했는지 안했는지 구분을 해준다고 한다.
- 학습데이터가 원핫벡터의 경우 categorical_crossentropy를 사용하고,
int 형태는 sparse_categorical_crossentropy를 사용한다
2.3.1. MeanSquredError (mse)
- 예측값과 실제값 차이를 제곱하여 평균화 함.
- 예측값과 실제값 차이의 면적을 구하며, 특이값이 존재하면 수치가 많이 늘어난다.
2.3.2. RMSE
- MSE의 값 왜곡을 줄이기 위해 루트를 덮어 씌운것
2.3.3. BinaryCrossentropy
- label이 2개일 경우 (0과 1) 사용하면 좋다고 한다.
2.3.4. mean_absolute_error (mae)
- 실제값과 예측값의 차이를 절대값으로 변환하여 평균화를 한다.
- 에러값의 크기를 그대로 반영한다.
* 원핫벡터
- 벡터의 값중 한개만 1이고, 나머지는 0인 벡터로, 단어 등 다른 데이터 형식을 벡터화 할때
사용된다.
(예 : 1개의 문장에 4개의 단어가 들어가 있을 경우, "나는 등교시 운전을 한다" 에서, 나는, {1,0,0,0} 등교시, {0.1.0.0} ..
로 정했다면, 해당 문장은 {[1,0,0,0], 로 데이터화 하여 표현할 수 있다.
[0,1,0,0],
[0,0,1,0],
[0,0,0,1]})
신경망모델변수명(keras.Sequential 함수).compile(optimizer="adam", metrics=["accuracy"],
loss="sparse_categorical_crossentropy")
3. keras.Sequential.fit
- compile 이후 신경망 학습하는 함수 이다.
인자값을 살펴보면,
3.1 epochs
- 몇번 학습을 수행 할지 정해주는 int 값이다. 많이 학습한다고 해서 좋은게 아니고, 적절한 값을 찾아야만 한다.
3.2. x, y
- 학습에 사용될 실제 데이터 이다.
3.3. validation_data
- 학습의 정답이 담긴 데이터 이다. x, y 와 같은 형태의 데이터 이어야 한다. AI가 학습 진행을 하고 정확도 계산 혹은
early end를 결정하기 위해선 정답이 필요하다.
3.4. callbacks
- 배열 인자값,
- keras.callbacks 에 명시된 함수를 인자값으로 받는다. 보통 조기종료후 실행되는 콜백. early stop을 인자값으로
준다.
model.fit(학습x값, 학습y값, epochs=EPOCHS,
validation_data=(정답x값, 정답y값),
callbacks=[콜백변수 - keras.callbacks 함수로, EarlyStopping])
4. keras.callbacks.EarlyStopping
인자값을 보면,
4.1. monitor
- 기준이 되는 값을 의미.
- val_loss 는 val_loss 가 더이상 감소되지 않을경우 해당.
- val_acc 의 경우, 정확도를 의미함.
4.2. patience
- 더이상 학습의 개선이 없을 경우에도, 최적값으로 몇번 더 검증을 할것인가 하는 인자값.
- 숫자값
4.3. min_delta
- 개선이 되었는지 아닌지 평가하는 기준값. 만일 값이 0.1인데, 다음 step에 개선된 값이 0.05라면 개선이 안된것
으로 간주한다.
4.4. verbose
- 0 또는 1의 값
- 1일경우, early stopping 발생시 화면에 알려줌.
4.5. mode
- auto, min, max
- monitor 값이 최대이어야 하는지, 최소이어야 하는지 혹은 자동판단인지 설정.
- val_loss 는 최소, val_acc는 최대가 유리.
4.6. baseline
- 학습이 달성해야 하는 최소한의 기준값.
- pacience 이내에 baseline 보다 개선이 되지 않는다면 트레이닝을 중단함.
4.7. restore_best_weights
- true, false
- true일 경우, 학습 종료 후 weight를 학습 시 가장 좋았던 값으로 복원하고, false는 가장 마지막 값으로 설정
early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)
'딥러닝(텐서플로우)' 카테고리의 다른 글
Predict (0) | 2023.03.31 |
---|---|
이미지 (영상) 딥러닝 CNN (0) | 2023.03.30 |
경사하강법 (0) | 2023.03.28 |
딥러닝 개요 (0) | 2023.03.23 |
신경망 종류 (0) | 2023.03.23 |