• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    해결됨

개별 약한 학습기 가중치와 가지치기 관련하여 이해가 안됩니다.

23.12.17 15:55 작성 조회수 119

1

안녕하세요~ 선생님!

선생님 강의 들으며 항상 감탄하고 또 많은 것을 배우고 있습니다~^_^

 

선생님 강의 토대로 책으로 복습하고 있는데, 이해가 안되는 부분이 있어서요.

  1. 222p에서 첫 번째 학습기의 가중치는 0.3, 두 번째 학습기의 가중치는 0.5, 세 번째 학습기의 가중치는 0.8 이렇게 늘어나는 것 같은데 학습기 자체에 가중치가 늘어나는 것인지, 오류 데이터에 대해서만 가중치가 크게 늘어나는 것인지 궁금합니다.

  2. 그리고 만약 오류 데이터에서 가중치가 늘어나는 것이라면 그림을 보면 분류 기준1로 자르고 나면 오류데이터가 가중치를 부여해서 커지고, 다시 분류 기준2로 자르고 나면 오류 데이터가 가중치를 부여해서 커져서 오류 가중치 자체가 0.3, 0.5, 0.8로 커질 필요없이 동일해도 될 것 같은데 커지는 것이 이론상으로 이유가 있는지 궁금합니다.

  3. 226p에서 표의 나무 가지치기 관련하여 GBM은 분할 시 부정 손실이 발생하면 분할을 더 이상 수행하지 않는다고 했는데, 부정 손실이 무슨 의미인지 궁금합니다.

 

강의로 항상 큰 도움 받고 있습니다. 감사드려요~

답변 1

답변을 작성해보세요.

0

안녕하십니까,

강의에서 설명드리는 것은 Adaboost입니다. GBM은 경사 하강법에 대해서 설명해야 되서, 직관적인 이해는 Adaboost로 이해 시키는게 더 편해서 그랬습니다. 나중에 회귀에서 경사 하강법에 대해서 설명드립니다.

Adaboost를 간단하게 말씀드리면, 약한 학습기에서 학습 시에 오류가 발생한 데이터에만 별도의 가중치를 부여해서 다음 약한 학습기에서는 해당 데이터를 좀 더 잘 학습하기 위한 방법입니다. 여기서 가중치를 준다는 것은 가중치가 상대적으로 작은 데이터 보다 가중치가 더 큰 데이터가 학습 데이터로 사용될 확률이 높다는 것을 의미합니다.

첫번째 약한 학습기에서 만들어진 오류를 줄이기 위해서 해당 데이터에 가중치(Adaboost 전용의 가중치 공식)가 부여되고, 이렇게 다시 만들어진 학습 데이터에 약한 학습기로 학습을 시킨 뒤 오류가 발생하면 다시 가중치를 계산해서 해당 데이터의 부여하는 방식으로 지속적으로 학습을 해나가는 방식입니다.

아래는 질문에 대한 답변입니다.

  1. 네, 오류 데이터에만 가중치를 부여합니다.

     

     

  2. 음, 이건 제가 질문을 잘 이해하지 못했습니다. 위의 내용을 참조하셔서 다시 한번 질문을 정리해 주셨으면 합니다.

     

  3. 원래 트리의 노드가 분할 되면 될 수록 손실값이 줄어야 하는데, 그렇게 되지 못하는 경우가 발생하는 것을 부정 손실이라고 합니다. 이 경우 GBM은 더 이상 노드를 분할하지 않습니다.

강의가 도움이 되었다니, 저도 기쁘군요. 감사합니다.

choi_e_b님의 프로필

choi_e_b

질문자

2023.12.17

상세한 설명 너무 감사드립니다~ 1,3번 이해가 잘 되었어요!!^^

 

2번은 제가 이해한 바로는 step1에서 오분류된 3개의 +데이터에서 가중치가 0.3이 주어져서 두번째 학습기의 분류기준2가 만들어진 것이고 이 때 오분류된 3개의 -데이터에 다시 0.5 가중치를 주어야 세번째 학습기의 분류기준3가 만들어진 것이라고 이해했습니다. step4의 그림을 보면 오분류된 3개의 -데이터에만 가중치를 주고, 분류기준1로 인해 오분류된 3개의 +데이터에는 가중치를 안 주는데 그렇다면 굳이 0.5로 늘릴필요 없이 동일하게 0.3으로 해도 되는 건 아닌지 생각이 들어서요.

하지만 책에서는 0.3, 0.5, 0.8 이렇게 커져서 학습기는 오류 데이터에 가중치를 줄 때 이전 학습기 보다 더 큰 가중치로 해주어야 한다는 룰이 있는 것인지 궁금하여 질문드렸습니다. 제가 설명을 어렵게 했다면 양해부탁드려요..^^;;

가중치는 이어지는 약한 분류기에서 오류가 나는 경우에만 오류 데이터에 부여 합니다. 그리고 가중치값을 계산하는 로직은 별도로 있습니다. 이게 수식이 좀 있어서 설명을 생략했을 뿐입니다. 일률적으로 가중치 값을 높이거나 하는 로직은 아닙니다.