NLP를 위한 CNN (4): A Sensitivity Analysis of Convolutional Neural Networks for Sentence Classification
06 Aug 2018 | NLP
NLP에서 활용되는 Convolutional Network에 대해서 논문 하나씩 알아보도록 한다. 전체 List는 다음과 같다.
- Understanding CNN for NLP
- Convolutional Neural Network for Sentence Classification, 2014
- A Convolutional Neural Network for Modelling Sentences, 2014
- A Sensitivity Analysis of Convolutional Neural Networks for Sentence Classification [현재글]
- Character-level Convolutional Networks for Text Classification
A Sensitivity Analysis of Convolutional Neural Networks for Sentence Classification
이 논문은 CNN을 활용한 새로운 구조의 모델을 소개하는 논문이 아니라, CNN을 활용해서 Sentence Classification을 위한 모델을 만들 때 선택해야할 여러 Hyperparameter들의 선택을 돕기 위해 여러 가지를 비교하며 보여주는 논문에 가깝다.
CNN의 경우 학습과정이 빠르지 않기 때문에 다향한 Hyperparameter들의 실험하는 것이 어렵다. 따라서 이 논문에서 소개하는 내용을 참고하는 것이 속도 및 효율측면에서 도움이 된다. 여기에서 실험해본 요소로는 다음의 것들이 있다.
- input word 표현(embedding)
- filter의 region size
- feature map의 수
- activation function
- pooling 전략
- 정규화 방법
CNN Architecture
여기에서는 Architecture의 경우 세부적인 내용은 계속해서 바뀌므로 일반적인 부분에 대해서 소개한다. 우선은 1-layer CNN을 사용했으며, input값에 대해서 먼저 알아보자.
input값은 각 문장을 tokenize한 뒤 각 단어를 embedding 한 벡터로 만들어서 단어 벡터들을 합친 matrix가 된다. embedding 방법으로는 word2vec과 glove를 사용했다. 그리고 벡터의 dimension은 $d$라 한다.
그 다음으로는 convolution의 filter에 대해서 설명하면, filter의 넓이(width)는 건들지 않고 $d$로 고정시켰다. 단어 임베딩의 dimension이 $d$이기 때문에 이 부분은 수정하지 않고 높이(height)만 수정했다. 즉 filter가 몇개의 단어를 보는지를 바꾸면서 실험했다. 이 부분이 의미하는 것이 필터의 region size이다.
필터를 적용시킨 후 bias()를 더하고 activation fucntion()를 각 요소에 사용했다.
다음으로는 풀링을 적용시킨다. 일반적인 방법은 1-max pooling으로 각 feature map에 대해서 하나의 scalar값을 뽑는 방법이다. 풀링의 결과인 filter map으로 부터 만들어진 output을 고정된 길이로 concatenate한다. 이후 classification을 위해 softmax함수를 사용한다. 여거서 정규화를 위해 dropout을 사용할 수 있다. 또 l2 norm 정규화도 사용 될 수 있다. 아래의 그림이 위의 여러 경우의 Architecture를 하나로 설명한 그림이다.
이제 학습과정이 남았다. 우선은 Objective funciton으로는 cross-entropy loss함수를 사용한다. 그리고 optimization으로는 SGD와 back-propagation을 사용한다.
DataSets
하나의 데이터셋으로 비교할 경우 정확한 결과를 얻기 힘드므로 여러 데이터셋을 사용해서 비교한다. 사용한 데이터셋은 다음과 같다.
- MR
- SST-1
- SST-2
- Subj
- TREC
- CR
- MPQA
- Opi
- Irony
Effect of each factor
각각의 요소에 의한 영향들을 비교 분석하면서 확인해보자.
Effect of input word vector
가장 먼저 word vector represent 방법에 따른 영향을 분석해보자. 앞서 말했듯이 방법은 word2vec과 glove로 학습된 벡터를 사용한 뒤 비교하는 것이다. word2vec의 경우 1000억개의 google news의 단어를 학습한 벡터이고 glove는 web의 8400억개의 token을 학습시켰다. 두 방법 모두 300dimension의 벡터로 만들었으며 학습 중간에 update하지는 않았다. 그리고 word2vec과 glove를 concatenate한 벡터도 input으로 사용해서 실험을 했다. 즉 600 dimension의 vector로 사용한 것이다. 결과는 다음과 같다.
결과를 보면 word2vec과 glove의 경우 dataset에 따라 성능이 좋은 것이 다르고 보통은 크게 차이가 나지 않았다. 하지만 word2vec과 glove를 concatenate한 것은 생각보다 성능이 좋게 나오지는 않았다.
그리고 위의 결과에는 나와있지 않지만 one-hot encoding방식으로도 실험을 진행했지만 embedding방법에 비해 성능이 나오지 않았다.
Effect of filter region size
filter가 적용되는 크기인 region size를 1, 3, 5, 7, 10, 15, 20, 25, 30의 크기를 두고 비교했다. 결과를 보면 각 데이터셋에 맞는 최적의 region size가 있다는 것을 알 수 있다. 데이터의 sentence길이가 길수록 이 최적의 region size의 길이는 길어지는 경향이 있다.
그리고 region size를 단일값으로만 사용하지 않고 여러 size를 사용해서 실험 한 결과는 다음과 같다.
결과를 보면 region size를 여러개 사용한다고 크게 성능에서 차이가 나지 않음을 보인다. 가장 높은 효율을 보일 때는 모든 region size를 동일하게 7로 했을 때이다.
Effect of number of feature maps for each filter region size
여기서는 region 크기는 3,4,5로 고정을 하고 feature map의 수를 10, 50, 100, 200, 400, 600, 1000, 2000으로 둬서 비교했다. 여기서도 마찬가지로 각 데이터셋에 맞는 최적의 feature map수가 있다는 것을 볼 수 있는데 그래도 하나의 경향성은 보통 feature map 수가 600까지는 성능이 증가한다는 것을 볼 수 있다.
Effect of activation function
활성화 함수로는 ReLU, tanh, sigmoid, softplus, cube, tanh cube, 그리고 ‘iden’으로 identitiy function도 사용했다. 결과는 다음과 같이 나온다.
9개의 데이터셋 중 8개의 데이터셋에서 Iden, ReLU, tanh중 하나가 가장 최적의 활성화 함수였다. 그리고 MPQA데이터셋에서는 SoftPlus가 다른 데이터에 비해 성능이 월등히 좋게 나왔다. 나머지 활성화 함수의 경우 다른 앞서 말한 활성화 함수들에 비해 성능이 나오지 않아서 표에서 확인할 수 없다. 결과에 대해서 분석을 해보자면 tanh의 경우 함수가 zero-centered한 성질이 있기 떄문에 좋은 성능을 보인 것 같다. 그리고 ReLU의 경우 sigmoid에 비해 non-saturating 한 성질이 도움이 된다. 그리고 SGD와 사용시 수렴하는 속도가 매우 빠르다. 한 가지 흥미로운 결과는 항등함수(identity)가 경우에 따라 좋은 결과를 만들기도 한다는 점이다. 그러나 만약 multiple hidden layer를 가진 network이라면 항등함수의 경우에는 non-linear이기 떄문에 적합하지 않다.
Effect of pooling strategy
Pooling의 경우에는 pooling region size와 strategy를 변경하며 실험했다. region size는 3, 10, 20, 30, 1-max pooling을 사용했고, 5, 10, 15, 20의 값에 대해 $k$-max pooling도 사용했다. 그리고 3, 10, 20 ,30의 region size로 average 풀링도 적용했다.
실험 결과는 average pooling이 일반적으로 max pooling보다 성능이 좋지 않았고 분석 결과 1-max pooling이 sentence classification에서는 좋은 성능을 보인다.
Effect of regularization
여기서는 dropout과 $l2$ regularization을 분석했다. 일반적으로 $l_2$ norm constraint는 성능을 향상시키지 못했다. 그리고 dropout의 비율을 다르게 하는 것 또한 성능변화가 크게 일어나지 않았다. 다음으로는 dropout을 penultimate layer가 아닌 convolutional layer에 적용시켰을 때는 성능이 조금은 좋아졌다. 결과적으로 이 논문에서는 dropout rate를 0~0.5정도로 적은 값으로 설정하고 상대적으로 max norm의 경우에는 크게 설정하라고 추천한다.
Conclusion
이 논문을 통해 본 결과 모든 요소들이 데이터셋과 다른 요소들에 의해서 좋고 나쁨이 명확하지는 않다. 하지만 성능에 크게 영향을 미치는 요소는 실험을 통해 tuning할 필요가 있다는 것을 의미한다. 튜닝이 필요한 hyperparameter는 우선 filter의 regionsize이다. 그리고 feature map의 수 또한 성능에 많은 영향을 미치므로 tuning이 필요하다. 나머지의 경우 얘기를하면 word representation은 word2vec 과 glove가 다른 방법들에 비해 classifcation에서는 월등한 성능을 보이므로 두 가지 중에서 사용하는 것이 좋다. 그리고 풀링은 1-max pooling이 적합하다. 마지막으로 regularization은 상대적으로 다른 요소들에 비해 영향이 적으니 크게 고려하지 않아도 된다.
긴글 읽어주셔서 감사합니다. 오역 및 잘못된 내용이 있을 수 있습니다. 잘못된 부분 혹은 이해가 잘 안되는 부분은 댓글 혹은 메일로 말씀해주시면 감사하겠습니다!
NLP에서 활용되는 Convolutional Network에 대해서 논문 하나씩 알아보도록 한다. 전체 List는 다음과 같다.
- Understanding CNN for NLP
- Convolutional Neural Network for Sentence Classification, 2014
- A Convolutional Neural Network for Modelling Sentences, 2014
- A Sensitivity Analysis of Convolutional Neural Networks for Sentence Classification [현재글]
- Character-level Convolutional Networks for Text Classification
A Sensitivity Analysis of Convolutional Neural Networks for Sentence Classification
이 논문은 CNN을 활용한 새로운 구조의 모델을 소개하는 논문이 아니라, CNN을 활용해서 Sentence Classification을 위한 모델을 만들 때 선택해야할 여러 Hyperparameter들의 선택을 돕기 위해 여러 가지를 비교하며 보여주는 논문에 가깝다.
CNN의 경우 학습과정이 빠르지 않기 때문에 다향한 Hyperparameter들의 실험하는 것이 어렵다. 따라서 이 논문에서 소개하는 내용을 참고하는 것이 속도 및 효율측면에서 도움이 된다. 여기에서 실험해본 요소로는 다음의 것들이 있다.
- input word 표현(embedding)
- filter의 region size
- feature map의 수
- activation function
- pooling 전략
- 정규화 방법
CNN Architecture
여기에서는 Architecture의 경우 세부적인 내용은 계속해서 바뀌므로 일반적인 부분에 대해서 소개한다. 우선은 1-layer CNN을 사용했으며, input값에 대해서 먼저 알아보자.
input값은 각 문장을 tokenize한 뒤 각 단어를 embedding 한 벡터로 만들어서 단어 벡터들을 합친 matrix가 된다. embedding 방법으로는 word2vec과 glove를 사용했다. 그리고 벡터의 dimension은 $d$라 한다.
그 다음으로는 convolution의 filter에 대해서 설명하면, filter의 넓이(width)는 건들지 않고 $d$로 고정시켰다. 단어 임베딩의 dimension이 $d$이기 때문에 이 부분은 수정하지 않고 높이(height)만 수정했다. 즉 filter가 몇개의 단어를 보는지를 바꾸면서 실험했다. 이 부분이 의미하는 것이 필터의 region size이다.
필터를 적용시킨 후 bias()를 더하고 activation fucntion()를 각 요소에 사용했다.
다음으로는 풀링을 적용시킨다. 일반적인 방법은 1-max pooling으로 각 feature map에 대해서 하나의 scalar값을 뽑는 방법이다. 풀링의 결과인 filter map으로 부터 만들어진 output을 고정된 길이로 concatenate한다. 이후 classification을 위해 softmax함수를 사용한다. 여거서 정규화를 위해 dropout을 사용할 수 있다. 또 l2 norm 정규화도 사용 될 수 있다. 아래의 그림이 위의 여러 경우의 Architecture를 하나로 설명한 그림이다.
이제 학습과정이 남았다. 우선은 Objective funciton으로는 cross-entropy loss함수를 사용한다. 그리고 optimization으로는 SGD와 back-propagation을 사용한다.
DataSets
하나의 데이터셋으로 비교할 경우 정확한 결과를 얻기 힘드므로 여러 데이터셋을 사용해서 비교한다. 사용한 데이터셋은 다음과 같다.
- MR
- SST-1
- SST-2
- Subj
- TREC
- CR
- MPQA
- Opi
- Irony
Effect of each factor
각각의 요소에 의한 영향들을 비교 분석하면서 확인해보자.
Effect of input word vector
가장 먼저 word vector represent 방법에 따른 영향을 분석해보자. 앞서 말했듯이 방법은 word2vec과 glove로 학습된 벡터를 사용한 뒤 비교하는 것이다. word2vec의 경우 1000억개의 google news의 단어를 학습한 벡터이고 glove는 web의 8400억개의 token을 학습시켰다. 두 방법 모두 300dimension의 벡터로 만들었으며 학습 중간에 update하지는 않았다. 그리고 word2vec과 glove를 concatenate한 벡터도 input으로 사용해서 실험을 했다. 즉 600 dimension의 vector로 사용한 것이다. 결과는 다음과 같다.
결과를 보면 word2vec과 glove의 경우 dataset에 따라 성능이 좋은 것이 다르고 보통은 크게 차이가 나지 않았다. 하지만 word2vec과 glove를 concatenate한 것은 생각보다 성능이 좋게 나오지는 않았다.
그리고 위의 결과에는 나와있지 않지만 one-hot encoding방식으로도 실험을 진행했지만 embedding방법에 비해 성능이 나오지 않았다.
Effect of filter region size
filter가 적용되는 크기인 region size를 1, 3, 5, 7, 10, 15, 20, 25, 30의 크기를 두고 비교했다. 결과를 보면 각 데이터셋에 맞는 최적의 region size가 있다는 것을 알 수 있다. 데이터의 sentence길이가 길수록 이 최적의 region size의 길이는 길어지는 경향이 있다.
그리고 region size를 단일값으로만 사용하지 않고 여러 size를 사용해서 실험 한 결과는 다음과 같다.
결과를 보면 region size를 여러개 사용한다고 크게 성능에서 차이가 나지 않음을 보인다. 가장 높은 효율을 보일 때는 모든 region size를 동일하게 7로 했을 때이다.
Effect of number of feature maps for each filter region size
여기서는 region 크기는 3,4,5로 고정을 하고 feature map의 수를 10, 50, 100, 200, 400, 600, 1000, 2000으로 둬서 비교했다. 여기서도 마찬가지로 각 데이터셋에 맞는 최적의 feature map수가 있다는 것을 볼 수 있는데 그래도 하나의 경향성은 보통 feature map 수가 600까지는 성능이 증가한다는 것을 볼 수 있다.
Effect of activation function
활성화 함수로는 ReLU, tanh, sigmoid, softplus, cube, tanh cube, 그리고 ‘iden’으로 identitiy function도 사용했다. 결과는 다음과 같이 나온다.
9개의 데이터셋 중 8개의 데이터셋에서 Iden, ReLU, tanh중 하나가 가장 최적의 활성화 함수였다. 그리고 MPQA데이터셋에서는 SoftPlus가 다른 데이터에 비해 성능이 월등히 좋게 나왔다. 나머지 활성화 함수의 경우 다른 앞서 말한 활성화 함수들에 비해 성능이 나오지 않아서 표에서 확인할 수 없다. 결과에 대해서 분석을 해보자면 tanh의 경우 함수가 zero-centered한 성질이 있기 떄문에 좋은 성능을 보인 것 같다. 그리고 ReLU의 경우 sigmoid에 비해 non-saturating 한 성질이 도움이 된다. 그리고 SGD와 사용시 수렴하는 속도가 매우 빠르다. 한 가지 흥미로운 결과는 항등함수(identity)가 경우에 따라 좋은 결과를 만들기도 한다는 점이다. 그러나 만약 multiple hidden layer를 가진 network이라면 항등함수의 경우에는 non-linear이기 떄문에 적합하지 않다.
Effect of pooling strategy
Pooling의 경우에는 pooling region size와 strategy를 변경하며 실험했다. region size는 3, 10, 20, 30, 1-max pooling을 사용했고, 5, 10, 15, 20의 값에 대해 $k$-max pooling도 사용했다. 그리고 3, 10, 20 ,30의 region size로 average 풀링도 적용했다.
실험 결과는 average pooling이 일반적으로 max pooling보다 성능이 좋지 않았고 분석 결과 1-max pooling이 sentence classification에서는 좋은 성능을 보인다.
Effect of regularization
여기서는 dropout과 $l2$ regularization을 분석했다. 일반적으로 $l_2$ norm constraint는 성능을 향상시키지 못했다. 그리고 dropout의 비율을 다르게 하는 것 또한 성능변화가 크게 일어나지 않았다. 다음으로는 dropout을 penultimate layer가 아닌 convolutional layer에 적용시켰을 때는 성능이 조금은 좋아졌다. 결과적으로 이 논문에서는 dropout rate를 0~0.5정도로 적은 값으로 설정하고 상대적으로 max norm의 경우에는 크게 설정하라고 추천한다.
Conclusion
이 논문을 통해 본 결과 모든 요소들이 데이터셋과 다른 요소들에 의해서 좋고 나쁨이 명확하지는 않다. 하지만 성능에 크게 영향을 미치는 요소는 실험을 통해 tuning할 필요가 있다는 것을 의미한다. 튜닝이 필요한 hyperparameter는 우선 filter의 regionsize이다. 그리고 feature map의 수 또한 성능에 많은 영향을 미치므로 tuning이 필요하다. 나머지의 경우 얘기를하면 word representation은 word2vec 과 glove가 다른 방법들에 비해 classifcation에서는 월등한 성능을 보이므로 두 가지 중에서 사용하는 것이 좋다. 그리고 풀링은 1-max pooling이 적합하다. 마지막으로 regularization은 상대적으로 다른 요소들에 비해 영향이 적으니 크게 고려하지 않아도 된다.
긴글 읽어주셔서 감사합니다. 오역 및 잘못된 내용이 있을 수 있습니다. 잘못된 부분 혹은 이해가 잘 안되는 부분은 댓글 혹은 메일로 말씀해주시면 감사하겠습니다!
Comments