ResNet 건너 뛰기 연결을 통한 그라디언트 역 전파


22

ResNet 모듈 / 건너 뛰기 연결을 사용하여 그라디언트가 신경망을 통해 어떻게 전파되는지 궁금합니다. ResNet에 대한 몇 가지 질문을 보았습니다 (예 : 스킵 레이어 연결을 가진 신경망 ). 이것은 훈련 중 그라디언트의 역 전파에 대해 특별히 묻습니다.

기본 아키텍처는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

필자는이 논문 인 이미지 인식을위한 잔차 네트워크 연구 (Research of Residual Networks for Image Recognition )를 읽고 섹션 2에서 ResNet의 목표 중 하나가 그라디언트가 기본 레이어로 역 전파되는 경로를 더 짧고 명확하게 만드는 방법에 대해 설명합니다.

이 유형의 네트워크를 통해 그라디언트가 어떻게 흐르는 지 설명 할 수 있습니까? 추가 작업과 추가 후 매개 변수가없는 레이어가 어떻게 더 나은 그라디언트 전파를 허용하는지 이해하지 못합니다. add 연산자를 통해 흐를 때 그라디언트가 변경되지 않는 방식과 관련이 있으며 곱셈없이 어떻게 재배포됩니까?

또한 그라디언트가 가중치 레이어를 통해 흐를 필요가 없으면 소실 그라디언트 문제가 어떻게 완화되는지 이해할 수 있지만 가중치를 통해 그라디언트 흐름이 없으면 역방향 통과 후에 어떻게 업데이트됩니까?


바보 같은 질문, 왜 우리는 x를 건너 뛰기 연결로 전달하고 x를 끝내기 위해 inverse (F (x))를 계산하지 않습니까? 계산이 복잡합니까?
Yash Kumar Atri

나는 당신의 요점을 얻지 못했습니다. the gradient doesn't need to flow through the weight layers설명해 주시겠습니까?
anu

답변:


13

추가는 그라디언트를 두 입력에 동일하게 다시 보냅니다. tensorflow에서 다음을 실행하여이를 확신 할 수 있습니다.

import tensorflow as tf

graph = tf.Graph()
with graph.as_default():
    x1_tf = tf.Variable(1.5, name='x1')
    x2_tf = tf.Variable(3.5, name='x2')
    out_tf = x1_tf + x2_tf

    grads_tf = tf.gradients(ys=[out_tf], xs=[x1_tf, x2_tf])
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        fd = {
            out_tf: 10.0
        }
        print(sess.run(grads_tf, feed_dict=fd))

산출:

[1.0, 1.0]

따라서 그라디언트는 다음과 같습니다.

  • 스킵 레이어 연결을 통해 변경없이 이전 레이어로 다시 전달
  • 가중치가있는 블록으로 전달되어 해당 가중치를 업데이트하는 데 사용됩니다.

편집 : 질문 : "고속도로 연결과 신경망 블록이 다시 연결되는 지점에서의 동작은 무엇입니까?"

답은 다음과 같습니다. 그림 2의 공식에서이를 확인할 수 있습니다.

산출에프(엑스)+엑스

이것이 말하는 것은 :

  • 엑스
  • 엑스에프(엑스)
  • 여기에 레이블이 지정된 잔차 블록의 출력을 제공하기 위해산출

편집 2 :

약간 다른 단어로 다시 쓰기 :

  • 정방향으로, 입력 데이터는 버스로 흐릅니다.
    • 버스를 따라 점에서, 잔여 블록은 버스 벡터에 값을 추가 / 제거하는 법을 배울 수 있습니다
  • 역방향으로 그라디언트가 버스로 다시 흐릅니다.
    • 길을 따라 그라디언트가 지나간 잔여 블록을 업데이트합니다.
    • 잔차 블록 자체가 그래디언트도 약간 수정합니다.

잔차 블록은 뒤로 흐르는 그래디언트를 수정하지만 그래디언트가 통과하는 '스 쿼싱'또는 '활성화'기능은 없습니다. '스 쿼싱'/ '활성화'기능은 폭발 / 소실 그라디언트 문제를 일으키는 원인이므로 버스 자체에서 제거하여이 문제를 상당히 완화합니다.

편집 3 : 개인적으로 나는 다음 다이어그램과 같이 내 머리에 resnet을 상상합니다. 토폴로지는 그림 2와 동일하지만 버스가 네트워크를 통해 바로 흐르는 방식을 보여줍니다. 잔여 블록은 값을 탭하고 버스에 대해 작은 벡터를 추가 / 제거합니다.

여기에 이미지 설명을 입력하십시오


1
그래디언트가 (일반 네트워크에서와 같이) 가중치 블록을 통과하는 경우 resnet 혜택은 어디에서 오는가? 물론, 그래디언트가 기본 입력으로 직접 건너 뛸 수 있지만 다른 경로가 여전히 정상적으로 훈련 될 때 어떻게 성능이 향상됩니까?
Simon

3
내가 참조. 따라서 하나의 그라디언트가 x로 바로 건너 뛰고 다른 그라디언트는 가중치를 통해 x로 다시 전파됩니다. x가 2 개의 경로로 분할되어 x에 도달 할 때 합산됩니까? 그렇다면 그라디언트가이 레이어를 통해 다시 이동함에 따라 그래디언트가 변경되지 않습니까?
Simon

1
그래디언트는 변경없이 스택 아래로 계속 흐릅니다. 그러나 각 블록은 가중치 업데이트를 적용하고 자체 그라디언트 세트를 생성 한 후 자체 그라디언트 변경 사항을 스택에 제공합니다. 각 블록에는 입력과 출력이 모두 있으며 그라디언트는 입력에서 그라디언트 "고도"로 다시 흐릅니다.
휴 퍼킨스

1
@RonakAgrawal은 그림 2의 합계 오페라를 보여주는 편집을 추가하고 설명합니다
Hugh Perkins

1
내 설명을 약간 표현하는 두 번째 편집을 추가했습니다 :)
휴 퍼킨스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.