이번 챕터에서는 뉴럴넷을 어떻게 이해할 수 있는지! 그리고 아키텍처에서 각각의 부품?들이 어떤 역할을 하는지 등등을 가볍게 훑고 넘어가는 느낌입니다. 개인적으로는 분량도 그렇고 깊이도 그렇고 아쉬운 부분이 많은 챕터이지만, 애초에 책의 무게 자체가 딥러닝보다는 강화학습 쪽에 비중을 많이 두고 있다보니 어쩔 수 없는 것 같습니다.(아마 저자들이 그 쪽에 메인을 두고 있는 게 아닌가 싶네요..) 그렇다면 바로 내용 정리로 들어가보도록 하겠습니다.
내용 정리
- 2. Background on Interpretability
뉴럴넷은 상당한 black-box function인데, 이를 'white-box'로 바꾸기 위한 노력은 계속되어 왔다. 그 중 가장 가볍게 생각해볼 수 있는 것은 바로 Sensitivity이다. 그냥 각각의 input이 output에 어떤 영향을 끼치고 있는지 그 gradient를 분석해보는 것이다. 그 외에도 아키텍처에 따라, 적용 방법론에 따라 여러 가지 테크닉을 생각해 볼 수 있겠지만 이 챕터 전반에 걸쳐 분석도구로써 사용되는 것은 Sensitivity / Garson's Algorithm / Olden's Algorithm 정도로 제한된다. 이 챕터에서는 OLS와 비교를 많이 하는데, 아마도 뉴럴넷의 gradient를 OLS의 계수와 비슷한 맥락으로 이해될 수 있어서이지 않을까 싶다.
- 2.1. Sensitivities
linear output을 위해서는 activation function이 nonlinear하지 않아야 한다고 생각하는 착각이 있는데, 그렇지 않다. nonlinear activation function을 통과시켜도 linear한 function을 구성할 수 있다.
Fitted model sensitivity를 해석적으로 분석하기 위해서는 해당 모델이 모든 구간에서 연속이고 미분가능하여야 한다. 또한 안정적인 분석을 위해 함수가 립쉬츠 연속이라는 조건이 추가되어야 한다. 뉴럴넷의 경우 weights와 biases가 finite하다는 전제 아래 해당 조건을 만족하게 된다. tanh같은 경우 해당 조건을 만족하지만, ReLU를 activation으로 사용할 경우 미분가능하지 않으므로 논의에서 제한된다.
- 3. Explanatory Power of Neural Networks
Sensitivity의 경우 Multiple input & Multiple output의 경우 자연히 Jacobian으로 표현된다. 이외에는 딱히 주목할 만한 내용은 없는 것 같다.
- 4. Interaction Effects
일계미분값 말고 이계미분값까지도 분석대상으로 넣자는 내용이다. 자명히 Hessian을 구하는 것으로 이어진다.
- 5. Bounds on the Variance of the Jacobian
여러 form의 activation function에 대한 Jacobian Variance의 일반적인 bound는 구하기 힘들다. 그러나 ReLU에 대해서는 Heaviside function을 이용해서 표현할 수 있다. 항상 ReLU는 이런 상황에서 어떻게 처리하는지 궁금했었는데 Heaviside를 이용해서 표현한다는 게 신기하다. 물론 미분이야 불가능하지만 bound 구하는 데에는 확실히 쓸만한 도구인 것 같다.
- 5.1. Chernoff Bounds
ReLU 뿐만 아니라 완전히 일반적인 activation에도 bound를 구할 수 있다. 근데 너무 weak하고 impractical해서 별로 의미가 있지는 않은 것 같다.
- 5.2. Simulated Example
noise added linear model을 하나 구성해서 OLS와 뉴럴넷을 비교하는 내용이다. OLS에 비해서 뉴럴넷이 정확도가 약간 떨어지는데, 이건 Full Batch가 아니라 SGD를 사용한 것 + 적은 뉴런 개수 때문이다. 뉴런 개수가 늘어날수록 variance가 줄어들고 정확도가 높아진다.
- 6. Factor Modeling
Cross-Sectional Fundamental Factor Model (Rosenberg and Marathe, 1976)을 토대로 NN과 OLS를 비교해보는 작업을 한다. NN에서는 그냥 MLP를 바탕으로 분석을 하는데, 사용한 아키텍처는 Input - 10 - 10 - output으로 상당히 간소하다. L1 Regularization(lamda = 0.001)을 사용했다. 결과에서 흥미로웠던 점은 OLS와 MLP의 MSE가 트레이닝셋과 테스트셋 모두에서 거의 유사하다는 것이다. OLS가 MLP보다 트레이닝셋에서 살짝 성능이 안 좋고, 테스트셋에서는 살짝 좋다. 글에는 트레이닝셋에 대한 내용은 언급하지는 않고, 테스트셋 성능이 데이터가 단순함에도 MLP가 낮은 성능을 보여준다고 기술하였다. 뉴런이 늘어날수록 MSE가 줄었고, L1 Regularization 계수가 높을수록 트레이닝셋 MSE는 증가하고, 테스트셋 MSE가 줄어들었는데 엄청 깔끔하게 볼록하게 줄어드는게 조금 신기하긴 하다. 데이터셋 영향이겠지만 그래도 정규화 효과가 깔끔하게 떨어지는 게 놀랍다.
이어서 좀 더 큰 데이터셋을 가지고 MLP와 OLS를 비교했는데 MLP가 더 성능이 좋다는 이야기가 나온다. 비선형모델에 차원도 훨씬 큰데 당연한 내용이긴 하지... 튜닝을 하면 훨씬 좋은 결과를 가져올 수도 있을 것 같은데 말이다.
전반적으로 이번 챕터는 좀 아쉬웠다. 딥러닝 쪽에는 힘을 덜 준 느낌이 확실히 난다. 내용도 조금 부실하다. 뉴럴넷의 interpretability가 이것밖에 없었나 하는 느낌도 들고.. 아직 읽어보진 않았지만, 뒤쪽은 좀 꽉 차있었으면 좋겠다는 느낌이 든다.
댓글 없음:
댓글 쓰기