[Tech Study] 11월 AI Team
안녕하세요_!!
GDSC SSWU 23-24 chapter AI study team입니다!
저희는 중간고사를 마치고,
원래는 이 강의를 수강중에 있었다가,
팀원들 모두가 원하는 방향은 향후에 있을 Solution Challenge를 위해 실습 위주로 tensorflow를 다뤄보는 방향이었습니다.
모두가 원하는 방향과 맞지 않다고 판단을 하여
위의 강의를 섹션 6, 17강의까지 수강하고,
위의 강의를 선택하여 진행하였습니다!
그래서 11월 한달동안은 시험도 끝난만큼 기말이 오기 전에
모두들 빡세게 스터디를 진행하였는데요!
keras에서 제공하는 mnist dataset을 numpy array로 받아서 실제 tensorflow에 dataset을 만들었습니다.
위에 보이는 것은 keras의 손글씨 데이터 입니다.
그리고 위의 데이터는 사전적인 준비가 필요했는데,
Tensorflow_dataset을 사용하기 위해서는 conda를 이용해 가상환경에 데이터 셋을 설치해주어야 합니다.
이 과정이 스터디원 모두가 조금 힘들었다고 했지만,
안되는 부분을 보완할 점을 의논하면서 같이 공부해나갔습니다 : )
위의 코드는 shuffle을 적용하여 데이터를 4x4로 출력한 결과입니다.
암세포일 경우 1로 판단하고, 암세포가 아닐 경우 0으로 판단한 결과입니다.
위는 MultiClass Classification을 수행한 결과입니다.
여러개의 뉴런들이 나오는 모델은 softmax를 사용한다는 사실이 중요했습니다.
모델을 너무 크게 만들어 놓고 돌리면, overfitting이 될 가능성이 높다는 사실도 알게 되었습니다.
위의 결과 또한 MultiClass Classification의 결과입니다.
numpy 형태의 데이터 셋을 만들어주고,
tensorflow를 위한 데이터셋을 만들었습니다.
그런 다음 학습을 진행 한 결과가 위의 사진과 같았습니다.
dense layer를 하나 더 추가했을 때의 결과가 조금 덜 복잡한 모델을 실행시켰을 때 보다
곡선형태가 등장하면서 학습이 더 잘 됨을 확인했습니다.
mnist 데이터를 가지고 classification 하는 과정
- mnist 데이터를 불러온다.
- 불러온 데이터를 split과 standardization으로 preprocessing한다.
- 학습을 위한 모델을 작성한다.(model subclassing)
- loss와 accuracy에 대한 metrics 함수를 만든다.
- trainer와 validation, tester 함수들을 만든다.
- 결과를 출력하는 reporter 함수를 만든다.
- 실제 학습을 위한 파라미터 값(epoch, LR, batch_size)을 지정해 학습을 진행한다.
- epoch별로 trainer와 validation 함수가 돌아가고 최종적으로 tester 함수의 결과를 확인한다.
Gradient vanishing problem
Gradient vanishing problem 에 대한 기본적인 이론에 대해 배웠습니다.
gradient가 전파되지 않고 소실되는 문제로 작은 값이 값들이 계속 곱해져서 gradient의 절대값이 점점 작아집니다.
이는 sigmoid와 tanh와 같은 activation함수 때문에 발생합니다.
⇒ Relu함수를 사용하면 gradient vanishing problem이 발생하지 않는다는 사실을 알았습니다.
Relu를 증명하는 과정에서,
위의 사진은
sigmoid 와 layer 7개
backpropagtion 할 수록 10^-5와 같이 gradient의 절대값이 점점 떨어지는 것을 알 수 있었습니다.
- 정리!!
- Gradient vanishing problem은 gradient가 전파되지 않고 소실되는 문제
- 작은 값이 값들이 계속 곱해져서 gradient의 절대값이 점점 작아진다.
- sigmoid와 tanh와 같은 activation함수 때문에 발생한다.
- relu함수를 사용하면 Gradient vanishing problem이 발생하지 않음
7주차에서는 layer에 대해서 심도있게 공부했습니다.
fully connected layer 는 완전히 연결 되었다라는 의미로, 한층의 모든 뉴런이 다음층의 모든 뉴런과 연결된 상태를 말합니다.
2차원의 배열 형태의 이미지를 1차원의 평탄화 작업을 통해 이미지를 분류하는데 사용됩니다.
fully connected layer 는 한층의 모든 뉴런이 다음 층의 모든 뉴런과 연결되어야 하며,
weight vetor 는 input vector에 대해서 전부 곱해져야 하기 때문에 784x1의 열벡터가 됩니다.
weighted sum으로 output scalar 는 input vector의 T * weight vector가 됩니다.
위는 데이터들간의 유사도를 보는 과정을 공부한 결과입니다.
유사도 판별 기준인 correlation 연산은 input vector와 weight vector의 모양이 비슷해질 때 유사도 값이 커집니다.
correlation은 input이미지와 필터의 모양이 얼마나 유사한 가를 의미합니다.
0이라는 이미지를 넣었을 때, 10개의 필터(weight vector)에 넣어줍니다. 이는 뉴런이 10개인 것을 알 수 있었습니다.
- 픽셀의 색상값이 input vector인 x
- 픽셀의 weighted값이 weight vector인 w
픽셀의 색상에 따라, 흰색은 이미지 부분. 빨간색 0을 기준으로 양수값, 파란색 0을 기준으로 음수값으로 픽셀값이 존재하면 0으로 판단하지 않는다는 의미입니다.
밖에 있는 weighted는 숫자가 낮고, 0에 관련된 안쪽 부분으로 갈수록 weighted의 숫자값이 커집니다.
input 과 weight 를 곱하게 되고, 전체 28 x 28의 784개의 x와 w의 곱하고 더해 correlation의 값을 구할 수 있었습니다.
이렇게 11월의 스터디도 열심히 달렸습니다!
주말마다 진행하였던 모각코도 성실하게 수행해 준 AI팀원들에게 박수를! 👏 😊
어느덧 스터디 기간도 한 달 남았는데
기말고사도 다가오지만 좀만 더 힘내보아요!
감사합니다.