본문 바로가기
Machine Learning/개념 정리

딥러닝 학습 - parameter와 hyper-parameter

by W_log 2023. 9. 18.

지금까지 실제 모델이 추론 - 학습을 하는데 필요한 전체적인 프로세스를 정리해보았다. 이제 실제 인공신경망 코드를 처음부터 끝까지 완성하기 전에 마지막으로 딥러닝 훈련(Training)에 필요한 옵션들에 대해서 얘기해보려고 한다.

 

 

파라미터와 하이퍼 파라미터

지금까지 우리는 인간이 학습하는 것처럼 기계에게 여러 Case들을 보여주고 스스로 기계가 인공신경망의 "가중치"를 배우는 과정을 딥러닝이라고 했다.

 

이 때 우리가 학습시키려는 대상을 parameter라고 부르곤 했다. 하지만 모델을 학습시키는데 있어서 추가적으로 파라미터가 필요한데 이는 기계가 학습시키는 것이 아니라 인간이 수동으로 설정해줘야하는 지표이다.

 

우리는 이걸 hyper-parameter라고 하고, 아래는 우리가 지정해줘야하는 하이퍼 파라미터의 예시를 표로 정리해두었다.

 

 

우리가 마치 과외학생에게 과외를 해줄 때, 1) 어떤 커리큘럼으로(신경망 구조), 2) 효율적인 학습을 위해 평가 및 학습을 어떻게 할지(학습 방식)으로 가르쳐줄지, 3) 과외는 몇시간 몇회 할지(학습 실행)를 가르치듯이 기계를 학습시키기 위해 우리는 어떻게 하면 좋을지에 대한 이야기하고 보면 된다.

 

사실 인간이 수동으로 선정하는 것이기 때문에 여전히 heuristic한 방법들이 많이 활용된다. 관련된 논문들이 꽤 있는 것으로 알고 있는데 추후에 모아서 정리해보려고 한다.(learning rate decay, momentum 등)

 

 

모델의 설계

 

 

위의 도식은 개인적으로 정리해본 딥러닝 모델의 개발 프로세스이다. 빨간색으로 표시해둔 것이 중요하다고 생각한 부분인데, 기본적으로 실무적인 문제 중에는 굳이 딥러닝을 통해서 해결하지 않다도 되는 문제들이 꽤 많다. 회귀분석이나 SVM으로 충분히 성능을 보이는 경우도 있다.(인공지능 쪽 박사 과정을 마무리한 친구와 블로그에서 들은 내용이긴 하다...)

 

따라서 문제를 명확하게 정의해서 우리가 해결하려는 Task를 정의하는 것이 가장 중요하다. 이후에는 결국 기계에게 여러 학습 데이터를 보여주면서 기계가 스스로 가중치를 만들기 때문에 좋은 학습 데이터 셋을 얻는 것이 매우 중요하다. 최근 ChatGPT의 성능을 보면 이 말은 더더욱 확실해지는 것 같다.  

 

마지막으로는 계속 이터레이션을 돌려보는 것이다. 한번에 완벽한 모델을 만드는 것은 불가능하고, 결국 가볍게 아이디어를 반복해가면서 수정해나가는 것이 정말 중요하다.(Machine Learning Yearning book과 강의에서 Andrew NG 교수님이 정말 많이 반복한 이야기이기도 하.)

 

 

딥러닝 구현

요약해보면 딥러닝을 구현하는데 있어서 우리는 아래 이 두개의 함수만 정의해주면 된다.

def train(input, output):
    # 딥러닝의 레이어를 어떻게 구조화할지
    # forward-feed
    # loss_function과의 값 비교 & 가중치 업데이트
    # 위의 과정을 몇번 수행할지 정의
    return model
def predict(model, testset_input):
    #use the model(forward - feed)
    return predicted_output

 

*내가 개념을 공부하고 정리하는데 정말 많은 도움을 주었던 자료가 서울대 데이터 사이언스 대학원 수업인 "머신러닝 및 딥러닝1"(링크)인데, 여기서 발췌했다. 이 글의 주제와 별개로 정말 좋은 강의라서 꼭 이 쪽 분야를 공부하고 싶은 분이시라면 강추한다.