codingeverybody / codingyahac

https://coding.yah.ac
292 stars 50 forks source link

히든 레이어 많이 쌓기 vs 퍼셉트론 수 늘리기 #1070

Open limjustin opened 3 years ago

limjustin commented 3 years ago

히든 레이어 부분을 공부하다 의문이 든 점이 있습니다.

딥러닝에서 히든 레이어를 많이 쌓으면 더 정확해진다는 사실은 알고 있습니다. 이는 레이어의 층을 두껍게 쌓는다는 의미인 것 같습니다.

여기서 의문점이 든 것이, 퍼셉트론의 수를 늘려도 더 정확해질 거 같다고 생각을 했는데, 그 이유는 퍼셉트론의 수를 늘리면 그만큼 심화되게 데이터를 쌓을 수 있을 것 같아서 였습니다.

그래서 실제로 코드를 돌려보니 퍼셉트론의 수를 4개로 한 것과, 100개로 한 것에는 차이가 크더군요. 우연일수도 있겠는데, 퍼셉트론의 수를 늘리는 것도 데이터를 정확히 예측하는데 영향을 미치는 것인가요??

그렇다면, 히든 레이어를 많이 쌓는 것과 퍼셉트론의 수를 늘리는 것 중에 어느 것이 더 효율적인지 궁금하네요 ㅠㅠ 맘 같아서는 히든 레이어 층도 늘리고, 퍼셉트론의 수도 많게 하면 좋지 않을까 생각해봅니다...!

dayeongl commented 3 years ago

안녕하세요:)

  1. 히든레이어의 수와 퍼셉트론의 수는 정확도에 차이를 준다. 질문자분이 이해하신것 처럼 층도 많아지고 층안에 들어있는 퍼셉트론의 수를 늘리게 되면, 해당 모델은 더 많은 정보를 담을수 있게 됩니다. 따라서, 4개보다 100개로 한것이 더 많은 정보를 담게 되어서 더 정확도가 높게 측정 되었을 것입니다.

  2. 히든레이어와 퍼셉트론의 수는 정확도와 비례하지 않는다. 본 수업에서는 언급하지 않았지만, 모델을 학습하게 되면, underfitting/overfitting이 일어나는 경우가 있습니다. underfitting이란 히든레이어와 퍼셉트론의 개수가 작아서, 해당 모델에 충분한 정보를 담지 못한 경우를 의미하고, overfitting이란 히든레이어와 퍼셉트론의 개수가 너무 많아서, 해당 모델에 training data(즉, 훈련에 사용한 데이터)에 너무 꼭 맞게 학습이 되어서, validation data(즉, 검증에 사용한 데이터)로 추론(inference)을 할때 정확도가 떨어지는 경우 입니다. 1__7OPgojau8hkiPUiHoGK_w Screenshot-2020-02-06-at-11 09 13

현재까지는 어떤 특정 상황에 대해 적절한 히든레이어 수와 퍼셉트론을 구하는 절대적인 공식은 없지만, 이 분야에 대해서도 활발한 연구가 이루어지고 있습니다!

참고자료: https://stats.stackexchange.com/questions/181/how-to-choose-the-number-of-hidden-layers-and-nodes-in-a-feedforward-neural-netw

JeongsangBaek commented 3 years ago

윗 코멘트에 이어 또 하나 간과해선 안되는 것이 데이터의 '다양성'과 '양'입니다. 데이터가 다양하지 못하면 overfit가능성이 높아지고, 데이터가 적다면 히든 레이어가 방대해질수록 Vanishing Gradient 문제 등으로 인해 각각의 퍼셉트론을 자극하기가 점점 더 어려워집니다. 따라서 그만큼 정확도를 확보하기 위한 데이터의 요구량이 기하급수적으로 늘어납니다. Relu등의 정류기를 activation function으로 쓰는 방법을 통해 문제를 완화할 수는 있지만 한계가 있습니다. 따라서 본인의 데이터 사이즈에 맞는 히든 레이어 구성을 하는 것이 필요합니다.

간단하게 실험해볼 수 있는 사이트가 Tensorflow Playground인데요, 여기에 나오는 뉴럴넷의 레이어와 뉴런수를 최대로 늘려보시고 학습을 시작해보세요. 그러면 레이어가 작은 모델에 비해 큰 모델의 뉴런별 색의 전파가 매우 느리게 진행되는것을 눈으로 확인하실 수 있습니다.

RayleighKim commented 3 years ago

많은 분들이 답변을 남겨주셨으니, 저는 참고자료를 여기에 소개하고자 합니다.

tensorflow 102 강의까지 소화하신 다음에, Convolutional Neural Network에 익숙해지신다면, VGGnet 논문을 보시는 것도 추천합니다. 유사한 고민이 담겨있어요.

그리고 사실, 레이어의 depth와 노드수에 기대하는 역할은 꽤 다르답니다. 이에 관해서는 딥마인드가 UCL에서 강의한 딥러닝 시리즈의 2강의 설명이 좋습니다.

JeongsangBaek commented 3 years ago

윗분 이야기처럼 히든레이어의 depth와 width에 기대하는 역할은 다른게 맞습니다.

히든레이어의 depth는 좀 더 고차원적인 비선형 문제를 풀기를 원할 경우 늘리는 것이고, width는 그 문제를 풀기 위해 레이어별로 고려해야 하는 변수를 늘리는 역할을 합니다.

하지만 이것은 어디까지나 기본적인 이론이며, 입력 데이터의 특성에 따라 무엇을 늘리는 것이 예측 정확도를 올리는지는 모델 개발자가 직접 선택해야합니다.

예를 들어 데이터의 분포가 일종의 선형 분포를 이루고 있고 10개의 변수로 이루어진 선형 함수의 형태를 가지고 있다면 10/1의 싱글 레이어만으로도 문제 해결이 가능합니다. 하지만 고전적인 XOR 문제처럼 단 하나의 선형모델로 문제를 해결하기 어렵다면, 2/1 모델만으로는 50퍼센트 이상의 정확도를 만들 수 없고, 레이어를 하나 더 늘려 2/2/1형태로 구성하고 비선형적인 분류를 해야만 정확도를 높일 수 있는 것이죠.

그래서 가급적이면 모델을 설계하기 전 입력 데이터의 통계 지표, 데이터 비주얼라이제이션을 통해 입력할 데이터의 분포와 특성을 파악하시는 작업을 먼저 선행하시길 추천합니다. 분석이 끝난 후 어떻게 레이어를 구성해야 할지 좀 더 자세히 알고 싶다면 참고 링크를 참고해보시기 바랍니다.

cashbook commented 1 year ago

퍼셉트론을 하나씩 겹치면 히든레이어 수가 하나씩 늘어나는 거 아닌가요? 왜 따로 비교를 하는지 잘 이해가 가질 않아서요..!