[machine-learning] Keras : 커널과 활동 정규화의 차이점

저는 Keras에서 weight_regularizer 를 더 이상 사용할 수 없으며 그 자리에 활동커널 정규화 프로그램 이 있음을 알았 습니다 . 나는 알고 싶습니다:

  • 커널활동 정규화 의 주요 차이점은 무엇입니까 ?
  • weight_regularizer 대신 activity_regularizer 를 사용할 수 있습니까?



답변

활동 정규화는 그물의 출력의 함수로 작동하며 대부분은 숨겨진 단위를 정규화하는 데 사용되는 반면, weight_regularizer는 이름에서 알 수 있듯이 가중치에 대해 작동하여 감쇠합니다. 기본적으로 정규화 손실을 출력 ( activity_regularizer) 또는 가중치 ( weight_regularizer) 의 함수로 표현할 수 있습니다 .

문서에서 명확하지는 않지만 새로운 kernel_regularizer대체품 weight_regularizer입니다.

정의에서 kernel_regularizer:

kernel_regularizer : kernel가중치 행렬에 적용되는 정규화 함수 (정규화 참조).

그리고 activity_regularizer:

activity_regularizer : 레이어의 출력에 적용되는 정규화 기능 ( “활성화”). (정규화 참조).

중요 편집 다음의 버그가하는 것으로 activity_regularizer경우에만 Keras 버전 2.1.4에서 수정 된 (Tensorflow 백엔드 적어도이). 사실, 이전 버전에서는 활동 정규화 기능이 출력에 적용되는 대신 레이어의 입력에 적용됩니다 (의도 한대로 레이어의 실제 활성화). 따라서 이전 버전의 Keras (2.1.4 이전)를 사용하는 경우 활동 정규화가 의도 한대로 작동하지 않을 수 있습니다.

GitHub 에서 커밋을 볼 수 있습니다.

5 개월 전 François Chollet은 활동 정규화에 대한 수정 사항을 제공했으며 이는 Keras 2.1.4에 포함되었습니다.


답변

이 답변은 조금 늦었지만 미래의 독자에게 유용합니다. 그래서 필요는 그들이 말하는 발명의 어머니입니다. 필요할 때만 이해했습니다.
위의 답변은 둘 다 가중치에 영향을 미치는 차이를 실제로 언급하지 않으므로 가중치 자체에 대한 처벌과 레이어의 출력의 차이점은 무엇입니까?
답은 다음과 같습니다. 그물의 무게가 [-0.3]에서 [+0.3] 사이로 작고 멋진 경우를 만났습니다.
그래서 저는 그들을 처벌 할 수 없습니다. 그들에게는 아무런 문제가 없습니다. 커널 정규화는 쓸모가 없습니다. 그러나 레이어의 출력은 100에서 거대합니다.
레이어에 대한 입력도 작으며 항상 1보다 작습니다. 그러나 이러한 작은 값은 엄청난 출력을 생성하는 방식으로 가중치와 상호 작용합니다. 여기서 나는 내가 필요한 것이 커널 정규화가 아닌 활동 정규화라는 것을 깨달았다. 이것으로, 나는 그 큰 출력에 대해 레이어를 처벌하고 있습니다. 가중치 자체가 작은 지 상관하지 않습니다.이 상태에 도달하지 못하도록 막고 싶습니다. 그라디언트 및 정체.


답변