쉽게 배우는 머신러닝 3주차&4주차

김하진·2022년 5월 16일
0
post-thumbnail

쉽게배우는 머신러닝 4주차까지 완강을 하였다. 숙제도 다하고 강의내용을 계속해서 복습중이다.
또한 우리가 프로젝트 진행예정인 물체 인식(Object Detection) 에 대해서 조금 공부를 해보았다.

딥 러닝

출처: https://developer.nvidia.com/blog/inference-next-step-gpu-accelerated-deep-learning/

  1. 우리는 W(weight)와 b(bias)를 이용해서 주어진 입력을 가지고 출력을 만들어 낼 수 있다.
  2. 그런데 MLP가 만들어낸 출력이 정답값과 다를 경우 W와 b를 조절해야한다.
  3. 그것을 조절하는 가장 좋은 방법은 출력에서 Error(오차)를 발견하여 뒤에서 앞으로 점차 조절하는 방법이 필요하다.


출처: https://www.youtube.com/watch?v=kNPGXgzxoHw
역전파 알고리즘의 발견


출처: https://www.kdnuggets.com/2016/10/deep-learning-key-terms-explained.html-

  • Input layer(입력층): 네트워크의 입력 부분입니다. 우리가 학습시키고 싶은 x 값입니다.
  • Output layer(출력층): 네트워크의 출력 부분입니다. 우리가 예측한 값, 즉 y 값입니다.
  • Hidden layers(은닉층): 입력층과 출력층을 제외한 중간층입니다.
  • 결국 중요한것은 출력층이다! 출력층은 모든 계층과 연결되어 있다 ->(Fully connected layer = Dense layer)
  • 기본적인 뉴럴 네트워크에서는 은닉층의 중간부분레이어를 넓게 만들었다가 점차 좁아지는 방식으로 많이 구현 한다.
  • 베이스라인 모델을 튜닝할때는 네트워크의너비, 그리고 깊이를 늘리는 방법, 또한 전부 늘리는 방법이 있고 실무에서는 너비와 깊이를 바꿔가면서 많은 실험을 한다고 한다.

딥러닝의 주요개념

  • 배치사이즈(Batch size)
    - 만약 우리가 10,000,000개의 데이터셋을 가지고 있다고 가정합시다. 10,000,000개의 데이터셋을 한꺼번에 메모리에 올리고 학습시키려면 엄청난 용량을 가진 메모리가 필요하고 그 메모리를 사는데 (메모리가 없다면 개발하는데) 천문학적인 비용이 들 것입니다. 따라서 우리는 이 데이터셋을 작은 단위로 쪼개서 학습을 시키는데 쪼개는 단위를 배치(Batch)라고 부릅니다. 예를 들어서 1,000만개의 데이터셋을 1,000개 씩으로 쪼개어 10,000번을 반복하는 것이죠. 이 반복하는 과정을 Iteration(이터레이션)이라고 부릅니다.

  • 에폭(epoch)
    - 보통 머신러닝에서는 똑같은 데이터셋을 가지고 반복 학습을 하게되는데요, 이 과정은 우리가 수능시험을 대비해서 모의고사 문제를 여러번 풀어보는 과정하고 비슷합니다. 만약 100번 반복 학습을 한다면 100 epochs(에폭)을 반복한다고 말해요.

  • Activation functions (활성화 함수)


수많은 뉴런들은 서로 서로 빠짐없이 연결되어 있습니다. 그런데 뉴런들은 전기 신호의 크기가 특정 임계치(Threshold)를 넘어야만 다음 뉴런으로 신호를 전달하도록 설계되어 있습니다. 연구자들은 뉴런의 신호전달 체계를 흉내내는 함수를 수학적으로 만들었는데, 전기 신호의 임계치를 넘어야 다음 뉴런이 활성화 한다고해서 활성화 함수라고 부릅니다.

  • 딥러닝에서 가장 많이 보편적으로 쓰이는 활성화함수는 단연 ReLU(렐루) 입니다. 왜냐하면 다른 활성화 함수에 비해 학습이 빠르고, 연산 비용이 적고, 구현이 간단하기 때문입니다.

딥 러닝의 주요스킬

  • Data augmentation (데이터 증강기법)

과적합을 해결할 가장 좋은 방법은 데이터의 개수를 늘리는 방법입니다. 하지만 실무에서는 데이터가 넘쳐나기는 커녕 부족한 경우가 매우 많습니다. 부족한 데이터를 보충하기위해 우리는 데이터 증강기법이란느 꼼수아닌 꼼수를 사용합니다. 데이터 증강기법은 이미지 처리 분야의 딥러닝에서 주로 사용하는 기법입니다.
ex) -> 평행,수직이동,이미지회전,확대,축소,등등 한장의 이미지를 여러개의 형태로 변형시켜서 데이터의 개수를 증가

  • Dropout (드랍아웃)

과적합을 해결할 수 있는 가장 간단한 방법으로는 Dropout이 있습니다. Dropout은 단어에서도 의미를 유추할 수 있듯이 각 노드들이 이어진 선을 빼서 없애버린다는 의미가 있습니다.
ex) 사공이 많으면 배가 산으로 간다.. 같이 과적합이 발생하였을때 적당한 노드를 탈락시키면서 더 좋은 결과를 이끌어 낼 수 있다.

  • Ensemble (앙상블)

앙상블 기법은 컴퓨팅 파워만 충분하다면 가장 시도해보기 쉬운 방법입니다. 여러개의 딥러닝 모델을 만들어 각각 학습시킨 후 각각의 모델에서 나온 출력을 기반으로 투표를 하는 방법이죠. 앞에서 설명했던 랜덤 포레스트의 기법과 비슷합니다.
앙상블을 사용할 경우 최소 2% 이상의 성능 향상 효과를 볼 수 있다고 알려져 있습니다.

  • Learning rate decay (Learning rate schedules)
    Learning rate decay 기법은 실무에서도 자주 쓰는 기법으로 Local minimum에 빠르게 도달하고 싶을 때 사용합니다.

Convolutional Neural Networks (합성곱 신경망)


출처: https://ce-notepad.tistory.com/14
합성곱(Convolution)은 예전부터 컴퓨터 비전(Computer Vision, CV) 분야에서 많이 쓰이는 이미지 처리 방식으로 계산하는 방식은 위와 같습니다. 입력데이터와 필터의 각각의 요소를 서로 곱한 후 다 더하면 출력값이 됩니다.


르쿤 교수님은 합성곱을 이용한 이 신경망 디자인을 합성곱 신경망(CNN)이라고 명칭하였고 이미지 처리에서 엄청난 성능을 보이는 것을 증명했는데요. CNN의 발견 이후 딥러닝은 전성기를 이루었다고 볼 수 있습니다. 이후 CNN은 얼굴 인식, 사물 인식 등에 널리 사용되며 현재도 이미지 처리에서 가장 보편적으로 사용되는 네트워크 구조입니다.

  • 합성곱 계층(Convolution layer)

5x5 크기의 입력이 주어졌을 때, 3x3짜리 필터를 사용하여 합성곱을 하면 3x3 크기의 특성맵(Feature map)을 뽑아낼 수 있습니다. 필터(Filter 또는 Kernel)를 한 칸씩 오른쪽으로 움직이며 합성곱 연산을 하는데요, 이 때 이동하는 간격을 스트라이드(Stride)라고 합니다.

  • 합성곱 계층 + 활성화 함수 + 풀링을 반복하며 점점 작아지지만 핵심적인 특성들을 뽑아 내는데요. 여기서 풀링 계층(Pooling layer)은 특성 맵의 중요부분을 추출하여 저장하는 역할을 합니다.

  • Max pooling
    2x2 크기의 풀 사이즈(Pool size)로 스트라이드 2의 Max pooling 계층을 통과할 경우 2x2 크기의 특성 맵에서 가장 큰 값들을 추출합니다.

  • 그후 평탄화 계층을 통과하게 되면 우리는 완전연결 계층에서 행렬 곱셈을 할 수 있게되고 마찬가지로 완전연결 계층(=Dense=Fully connected) + 활성화 함수의 반복을 통해 점점 노드의 개수를 축소시키다가 마지막에 Softmax 활성화 함수를 통과하고 출력층으로 결과를 출력하게 된다.

물체 인식(Object Detection)또는 객체검출

  • Object detection은 사진 이미지에서 정확히 물체를 인식하는 것을 뜻하며 컴퓨터비전에서 가장 중요한 기술입니다. 각각의 객체를 정확하게 인식하는 것부터 Computer Vision이 시작하기 때문입니다.

  • Object Detection에서는 classification 뿐만 아니라 localization이라는 개념도 포함되어 있다.
    (Object detection=classification+localization).Localization 이란 객체라고 판단되는 곳에 직사각형(bounding box)를 그려준다.

강의를 다듣고 숙제도하고, Object Detection 을 계속해서 찾아보고 pytoch공식문서와 튜토리얼을 참고해서 실습도 해보고 코드도 계속해서 보고 있지만, 어려운게 사실이다. 사실 pytoch 는 처음써보는거라 문법이나 이런것이 조금은 생소한 것 같다. 또한 물체인식에서도 YOLO, Segmentation, 도 같이 활용해서 사용하는 것 같다.

솔직히 아직 개념이나 이런것들이 머리속으로 안들어온다, 또한 머신러닝에 비해서 딥러닝 부분이 훨씬 이해하기가 힘든 것 같다. 아직은 좀더 찾아보고 많은 고민과 연구가 필요한 것 같다.

profile
진킴

0개의 댓글