필터 매트릭스의 요소를 초기화하는 방법은 무엇입니까?


24

라이브러리 (Convnet 또는 TensorFlow와 같은)에 의존하지 않는 Python 코드를 작성하여 회선 신경 네트워크를 더 잘 이해하려고 노력하고 있으며 커널 매트릭스의 값을 선택하는 방법에 대한 문헌에 갇혀 있습니다. 이미지에서 컨볼 루션을 수행합니다.

아래 그림의 CNN 계층을 보여주는 기능 맵 사이의 단계에서 구현 세부 사항을 이해하려고합니다 .

컨볼 루션 뉴럴 네트워크 레이어

이 다이어그램에 따르면 :

이미지의 진화

커널 매트릭스 커널은 이미지를 "단계적으로 이동"하여 기능 맵을 작성합니다. 여기서 각 픽셀은 커널 (또는 필터 매트릭스)의 각 가중치와 입력 이미지의 해당 픽셀 값 사이의 모든 요소 별 곱의 합입니다.

내 질문은 : 커널 (또는 필터) 매트릭스의 가중치를 어떻게 초기화합니까?

위의 데모에서는 단순히 1과 0이지만 다이어그램을 통해 단순화 된 것으로 가정합니다.

이러한 가중치는 일부 전처리 단계에서 학습됩니까? 아니면 사용자가 명시 적으로 선택 했습니까?

답변:


19

하나는 일반적으로 무작위 분포에서 네트워크를 초기화합니다. 일반적으로 0을 의미하며 분산 선택과 관련하여 약간의주의가 필요합니다. 요즘에는 최적화 기술 (SGD + Momentum)과 진보 비선형 성 (ReLU 및 ReLU 유사 활성화를 통해 더 깊은 네트워크에서도 그라디언트 신호의 백프로 그 레이션이 향상됨)이 발전하면서 실제로 최신 컨볼 루션을 훈련 할 수있었습니다. 무작위 초기화의 신경망.

주요 특성은 다음과 같습니다.

  • 왜 무작위입니까? 왜 모두 0으로 초기화하지 않습니까? 여기서 중요한 개념은 대칭 파괴 입니다. 모든 뉴런의 가중치가 동일하면 동일한 출력을 생성하고 다른 기능을 배우지 않습니다. 역 전파 단계 동안 모든 가중치 업데이트가 정확히 동일하기 때문에 다른 기능을 배우지 않습니다. 무작위 분포로 시작하면 뉴런을 매우 높은 확률로 초기화하고 풍부하고 다양한 특징 계층을 배울 수 있습니다.

  • 왜 0을 의미합니까? 머신 러닝의 일반적인 관행은 입력 데이터를 제로 중앙에 두거나 정규화하여 원시 입력 기능 (이미지 데이터의 경우 픽셀이 됨)이 평균 0이되도록하는 것입니다.

    우리는 데이터의 중심을 맞추지 않았으며 네트워크의 가중치 (참조하는 매트릭스)를 임의로 초기화합니다. 어떤 종류의 배포판을 선택해야합니까? 우리가 네트워크에 입력 데이터를 배포하는 것은 우리가 0 중심이기 때문에 평균이 0입니다. 바이어스 용어를 0으로 초기화한다고 가정 해보십시오. 우리가 네트워크의 훈련을 초기화 할 때, 우리는 하나의 뉴런이 모두 무작위이기 때문에 다른 뉴런을 선호 할 이유가 없습니다. 한 가지 연습은 가중치가 모두 예상대로 활성화 출력이없는 방식으로 가중치를 무작위로 초기화하는 것입니다. 이러한 방식으로 임의의 뉴런이 다른 뉴런보다 "활성화"(양의 출력 값을 가짐)하는 동시에 랜덤 초기화로 인해 대칭을 깨뜨리는 것을 선호하지 않습니다. 이를 달성하는 간단한 방법은 평균 제로 분포를 선택하는 것입니다.

  • 분산을 어떻게 선택합니까? 평균이 0 인 경우에도 분산이 너무 큰 것을 선택하지 않으려 고합니다. 딥 넷 가중치의 극단적 인 값은 활성화 출력이 기하 급수적으로 증가하는 결과를 초래할 수 있으며,이 문제는 네트워크 깊이에 따라 복잡해질 수 있습니다. 이것은 우리 네트워크의 훈련에 혼란을 줄 수 있습니다. 또한 매우 작은 그래디언트 값을 계산하기 때문에 학습 속도가 느릴 수 있으므로 너무 작게 선택하고 싶지 않습니다. 따라서 앞으로 또는 뒤로 전파가 기하 급수적으로 기하 급수적으로 증가하거나 감소하는 것을 원하지 않기 때문에 특히 더 깊은 네트워크에 대해서는 균형이 있습니다.

    Glorot Uniform ( 딥 피드 포워드 신경망 훈련의 어려움 이해 )과 He Normal 초기화 기 ( Rectifiers에 대한 심층 분석 : ImageNet 분류에서 인간 수준의 성능을 능가 하는) 라는 두 가지 매우 인기있는 가중치 초기화 체계가 있습니다.

    둘 다 다음과 같은 핵심 원칙을 염두에두고 딥 네트워크 를 훈련 할 목적으로 구성됩니다 (인용 정보는 정류기 제공 기사에서 인용).

    "적절한 초기화 방법은 입력 신호의 크기를 기하 급수적으로 축소하거나 확대하지 않아야합니다."

    대략적으로 말하면,이 두 가지 초기화 체계는 각 뉴런의 출력 분포가 동일하도록 각 레이어의 분산을 초기화합니다. 정류기 심층 분석의 섹션 2.2는 심층 분석을 제공합니다.

마지막 참고 사항 : 때때로 사람들은 모든 계층에서 표준 편차가 .005 또는 .01 인 가우시안을 사용하거나 다른 "작은"표준 편차를 사용하는 것을 볼 수 있습니다. 다른 경우에는 사람들이 손으로 분산으로 바이올린을 보는 것을 보게 될 것입니다. 기본적으로 교차 유효성 검사를 수행하여 최상의 성능 구성을 찾습니다.


1
그러나 위의 GIF에서 노란색 필터의 "X"모양 (1로 만든 모양)은 어떻습니까? 그림의 어느 곳에서나 "X"모양을 감지하는 데 사용하고 싶은 것이 무엇인지 이해하지만 "X"가 원하는 모양이라는 것을 어떻게 알 수 있습니까? 필터 모양이 자동으로 학습된다는 인상을 받았지만 어떻게 해야할지 모르겠습니다. 어쩌면 이것은 OP의 질문일까요?
Felipe Almeida

2

나는 평판이 낮기 때문에 언급 할 수 없으므로 Felipe Almeida의 질문에 대한 답변으로 이것을 쓰고 있습니다. 인디 AI의 완벽한 답변 후에는 추가 할 것이 없습니다. X와 같은 특정 모양을 감지하려는 경우 가장자리 감지의 경우와 같이 특정 필터를 미리 정의 할 수 있습니다. 그러나 이것은 딥 러닝의 아름다움입니다. 레이어가 너무 많고 필터가 많고 반복이 많기 때문에 필터는 거의 모든 객체 형태를 학습합니다. 이론적으로 감지 할 X가 있으면 필터 중 하나가 X를 감지하는 방법을 학습합니다 (노란색 필터).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.