인공지능 AI 풀스택 시스템 (5)

1장 신경망 구현 방법

ReLu 기능을 사용하는 이유는 무엇입니까?

5. 그라데이션 소멸 문제

이미지 설명을 추가해주세요

1. 그래디언트 소실 문제란 무엇인가요?

이미지 설명을 추가해주세요
앞서 소개한 BP 알고리즘에서는 가중치 값이 다음과 같이 업데이트됩니다.
δ * h = oh ( 1 − oh ) ∑ * k ∈ Subsequent ( h ) δ * kw * kh \delta*h = o_h(1 - o_h) \ sum*{k\in 후속 조치(h)}\delta*kw*{kh}*시간=영형h( 1-영형h)* k후속 ( h ) δ*kw _*kh
Δ w * ji = eta δ jx * ji \Delta w*ji = \eta \delta_jx*{ji}Δ w*=_j엑스*ji
w * ji = w * ji + Δ w _ jiw*{ji} = w*{ji} + \Delta w\_{ji}*=*+Δw_ _ _

BP 알고리즘은 주로 후자 계층의 δ\delta를 기반으로 합니다.δ 값은 이전 레이어의 δ \delta를계산합니다.델타 값은 레이어별로 역전파됩니다. δ\deltaδ 의 계산식을 보면 매번 oh( 1 − oh ) o_h(1-o_h)를곱해야 한다는 것을영형h( 1-영형h) , 그 중oh o_h영형h뉴런 h의 출력입니다. 시그모이드 활성화 함수를 사용하는 경우 oh o_h 와 관계없이 값은 0~1 사이입니다.영형h1에 가까우거나 0에 가까움, 오 ( 1 − 오 ) o_h(1-o_h)영형h( 1-영형h) 값은 상대적으로 작으며 최대값도 0.25에 불과합니다(oh = 0.5일 때 o_h = 0.5).영형h=0.5 시간). 신경망의 레이어 수가 상대적으로 많은 경우 상대적으로 작은 수를 반복해서 곱하면oh o_h영형h0에 가까워지면 가중치를 업데이트할 수 없으며 훈련 능력이 상실됩니다. 이러한 현상을 Vanishing Gradient라고 합니다. 그리고 오( 1 − 오 ) o_h(1-o_h)영형h( 1-영형h) 는 정확히 시그모이드 함수의 파생이므로 시그모이드 활성화 함수를 사용하면 기울기가 쉽게 사라질 수 있습니다. 그리고 ReLU 활성화 함수로 바꾸면 ReLU(net)=max(0, net)이므로 net>0일 때 ReLU의 도함수는 1, oh ( 1 − oh ) o_h(1-o_h ) 가 됩니다.영형h( 1-영형h)을 1로 대체할 수 있어 그래디언트 소멸의 발생을 줄일 수 있습니다. 물론 그래디언트 소멸이 전적으로 활성화 함수에 의해 발생하는 것은 아니지만, 연구자들은 더 많은 신경망 계층을 구축하기 위해 그래디언트 소멸의 발생을 줄이기 위한 다른 방법도 제안했습니다.

2. 솔루션 아이디어

이미지 설명을 추가해주세요

3. 두 가지 예

이미지 설명을 추가해주세요

3.1 구글넷

여기에 이미지 설명을 삽입하세요.
이미지 설명을 추가해주세요

  • 이 신경망은 ImageNet 대회에서 한때 1위를 차지했습니다.
  • GoogLeNet은 네트워크가 LeNet을 기반으로 개발되었음을 표시하기 위해 의도적으로 이름을 지정할 때 L을 대문자로 사용했습니다(다음 5자는 LeNet임).

여기에 이미지 설명을 삽입하세요.

  • GoogLeNet은 다소 복잡하며, 그 구조는 그림과 같이 입력 레이어가 맨 아래에 있습니다. 이 네트워크에는 두 가지 주요 기능이 있는데, 첫 번째 기능은 Vanishing Gradient 문제를 해결하는 것과 관련이 있습니다.
  • 출력 레이어가 하나만 있는 일반 신경망과 달리 GoogLeNet은 서로 다른 깊이 위치에 3개의 출력을 설정합니다. 그림에서 노란색으로 표시되며 이름은 Softmax0, Softmax1 및 Softmax2입니다. 이름에서 알 수 있듯이 3개의 출력은 모두 사용합니다. 소프트맥스 활성화 함수 3개의 출력에 대한 손실 함수를 개별적으로 구성한 다음 전체 손실 함수로 가중 합계를 통해 함께 통합합니다. 이런 방식으로 서로 다른 깊이의 세 출력은 각각 기울기 값을 역전파하고 동시에 ReLU 활성화 함수를 사용하므로 기울기 소멸 문제를 더 잘 해결할 수 있습니다.
  • 3개의 출력 중 상단의 Softmax2는 실제 출력이고, 나머지 2개는 보조 출력으로 훈련에만 사용되며 훈련이 완료된 후에는 더 이상 사용되지 않습니다.
  • GoogLeNet의 두 번째 특징은 전체 네트워크가 Inception이라는 9개의 모듈로 구성되어 있다는 점이며, 그림에서 점선으로 표시된 부분이 첫 번째 Inception 모듈이고 그 다음으로 8개의 모듈이 있습니다.
    이미지 설명을 추가해주세요
3.1.1 인셉션 모듈
  • 그림과 같이 가장 원시적인 Inception부터 시작하여 원본 Inception 모듈은 가로 4개의 부분으로 구성되어 있으며, 왼쪽부터 1×1 convolution, 3×3 convolution, 5×5 convolution 입니다. 맨 오른쪽에는 3×3 최대 풀링도 있습니다. 각 컨볼루션은 여러 개의 컨볼루션 커널을 가지며, 1×1 컨볼루션은 1개의 컨볼루션 커널, 3×3 컨볼루션은 b개의 컨볼루션 커널, 5×5 컨볼루션은 c개의 컨볼루션 커널을 갖는다고 가정하면, 이 3개의 컨볼루션에 의해 얻어지는 채널 수는 다음과 같습니다. 각각 a, b, c이며, 가장 오른쪽의 3×3 최대 풀링을 통해 얻은 채널 수는 입력과 일치하며 d로 가정합니다. 이 네 부분에서 얻은 채널을 나란히 배열하면 각 인셉션의 출력은 총 a+b+c+d개의 채널을 갖게 됩니다.

이미지 설명을 추가해주세요

  • 서로 다른 크기의 컨볼루션 커널은 서로 다른 세분성의 특징을 추출할 수 있으며, GoogLeNet은 Inception을 사용하여 각 계층에서 서로 다른 세분성의 특징을 추출한 다음 이를 함께 집계하여 서로 다른 세분성의 기능을 최대한 활용하는 목적을 달성합니다.
3.1.2 차원 축소를 위한 Inception 모듈
  • 원래 모듈과 비교하면 차원 축소 기능이 있는 Inception 모듈은 주로 3개의 1×1 컨볼루션을 도입하는데, 그 중 2개는 3×3 컨볼루션과 5×5 컨볼루션 앞에 배치되고, 하나는 3× 컨볼루션 앞에 배치됩니다. 3 컨볼루션 가장 오른쪽의 3×3 최대 풀링 백.

이미지 설명을 추가해주세요

  • 1×1 컨볼루션의 도입에는 두 가지 효과가 있습니다. 첫째, 1×1 컨볼루션 커널은 두께를 가지므로 각 채널에서 동일한 위치에 있는 점을 선택하여 계산하는 것과 동일하며, 각 점은 특정 패턴 특징을 나타내며, 채널마다 서로 다른 특징을 나타내므로 결과는 다음과 같습니다. 동일한 위치에 있는 서로 다른 기능의 조합과 동일합니다. 두 번째는 1×1 컨볼루션을 이용하여 입력 채널 수와 출력 채널 수를 변환하여 채널 수를 줄이거나 늘리는 방법으로, 출력 채널 수가 입력 채널 수보다 적으면 다음과 같습니다. 차원 축소, 그 반대. 예를 들어, 입력이 100개 채널이라면 60개의 1×1 컨볼루션 커널을 사용하면 출력은 60개 채널이 되고 채널 수가 40% 감소하여 차원 축소가 달성됩니다. Inception에 추가된 3개의 1×1 convolution은 모두 차원 축소를 위한 것이므로 이 모듈을 차원 축소가 포함된 Inception 모듈이라고 합니다.

  • inception의 입력에 192개의 채널이 있고 32개의 5×5 컨볼루션 커널을 사용한다고 가정하면 총 매개변수는 몇 개입니까?

    • 입력이 192개 채널이므로 컨볼루션 커널은 5×5×192+1개의 매개변수를 가지며 그 중 1은 편향 b입니다. 총 32개의 컨볼루션 커널이 있으므로 (5×5×192+1)×32=153632개의 매개변수가 있습니다.
  • 5×5 컨볼루션 이전에 32개의 컨볼루션 커널이 포함된 1×1 컨볼루션 레이어를 추가하면 총 매개변수는 몇 개입니까?

    • 1×1 콘볼루션의 입력은 192채널이므로 콘볼루션 커널의 매개변수 개수는 1×1×192+1이고, 총 32개의 콘볼루션 커널이 있으므로 전체 매개변수는 (1×1×192)이다 +1)× 32=6176. 1×1 컨볼루션 출력은 32개의 채널을 가지며 32개의 컨볼루션 커널을 갖는 5×5 컨볼루션 레이어로 입력되며 이 레이어의 전체 매개변수 수는 (5×5×32+1)×32=25632이다. 결합된 두 레이어에는 총 6176+25632=31808개의 매개변수가 있습니다.
  • 차원 축소 이전에는 총 153,632개의 매개변수가 있었던 반면, 차원 축소 이후의 매개변수 수는 31,808개에 불과하여 차원 축소 전 매개변수 수의 약 20%에 불과하여 차원 축소의 효과가 뚜렷이 나타남을 알 수 있다. .

  • 여기서는 상대적으로 입력 채널의 수가 많을 수 있으므로 차원을 줄이기 위해 최대 풀링 후에 1×1 컨볼루션 레이어를 추가하고, 채널 수를 줄이기 위해 1×1 컨볼루션을 사용한다.

이미지 설명을 추가해주세요

3.1.3 GoogleNet의 또 다른 기능

이미지 설명을 추가해주세요

  • 출력 레이어 근처에는 7×7 평균 풀링 레이어가 사용되는데, 이 레이어는 일반적으로 완전 연결 레이어인데, GoogLeNet에서는 완전 연결 레이어 대신 평균 풀링이 사용됩니다. 풀링은 단일 채널에서 작동하고 각 채널은 동일한 패턴의 특징을 추출하므로 평균 풀링은 채널 특징의 평균 분포를 반영하고 특징에서 평활화 역할을 합니다. GoogLeNet 작성자에 따르면 이는 매개변수 수를 줄일 뿐만 아니라 성능도 향상시킵니다. 또한 첫 번째 Inception 이전에 2개의 Local Response Normalization 레이어를 추가하는데, Normalization 레이어를 적절한 위치에 추가하는 것이 일반적인 방법인데, 그 목적은 데이터의 분포가 너무 많이 바뀌는 것을 방지하는 것입니다. 신경망은 훈련 과정에서 업데이트되며, 이전 레이어의 매개변수 분포가 변경되면 그에 따라 다음 레이어의 데이터 분포도 변경됩니다. 정규화의 역할은 이러한 변경을 방지하는 것입니다. 너무 크지는 않습니다. 로컬 응답 정규화 외에도 배치 정규화가 이제 더 일반적으로 사용됩니다.
3.1.4 인셉션(Inception)이라는 단어의 유래
  • 인셉션(Inception)이라는 단어는 영화 '인셉션(Inception)'의 영어 제목에서 따왔습니다. 영화 속 대사가 있습니다: We need to go deep(우리는 더 깊이 들어가야 합니다). 누군가의 뇌에 생각을 심어주는 방법을 알려줍니다. 더 깊어지고 인식.
  • 신경망은 점점 더 많은 계층을 가지고 더 깊은 방향으로 발전해 왔습니다. "더 깊이 들어가는 것"이 ​​바로 신경망 연구자들이 원하는 것이므로 인셉션은 모듈의 이름입니다.
3.2 잔여 네트워크(ResNet)
  • 원칙적으로 신경망의 깊이가 깊을수록 성능이 좋아져야 하는데, 이미 k-layer 신경망이 있다고 가정하고 여기에 또 다른 레이어를 추가하여 k+1 레이어가 되면 새로운 학습 매개변수가 추가될 것이다. k+1 계층 신경망의 성능은 원래 k 계층보다 나빠서는 안 됩니다. 하지만 더 깊은 네트워크를 구축하는 방법은 그리 쉽지 않으며 단순히 레이어 수를 늘리는 것이 이상적이지 않거나 더 나쁜 경우도 많습니다. 따라서 우리는 더 깊은 신경망을 구축하려고 하지만 경사도 소멸과 같은 문제로 인해 깊은 신경망을 훈련하는 것이 더 어려울 것입니다. 일부 방법은 경사 소멸의 영향을 줄일 수 있지만 네트워크가 특정 깊이에 도달하면 이 문제가 계속 발생합니다. 실험 결과, 신경망 레이어 수가 증가할수록 성능 저하가 발생하는 것으로 나타났으며, 네트워크가 특정 깊이에 도달하면 훈련 세트에서도 단순히 네트워크 레이어 수를 늘리면 손실 함수 값이 감소할 뿐만 아니라, 늘려라. . 아래 그림은 이에 대한 예를 보여줍니다.
    이미지 설명을 추가해주세요
  • 가로축은 훈련의 반복횟수, 세로축은 오류율을 나타내고, 왼쪽은 훈련세트의 오류율, 오른쪽은 테스트세트의 오류율을 나타낸다. 그림에서 볼 수 있듯이 훈련 세트와 테스트 세트 모두에서 56층 신경망의 오류율이 20층 신경망의 오류율보다 높습니다.
  • 이 문제는 더 복잡하며 단순히 그래디언트 소실 문제로 인해 발생하는 것이 아닙니다. 많은 이유가 있을 수 있지만 여전히 이론적으로 분석하고 설명해야 합니다. 이 예는 원칙적으로 신경망을 심화시키는 효과가 더 좋아야 하지만 단순히 네트워크를 심화시키는 것만으로는 충분하지 않으며, 네트워크 심화로 인해 발생하는 문제를 해결하려면 새로운 아이디어가 있어야 함을 보여줍니다.
3.2.1 솔루션 아이디어

이미지 설명을 추가해주세요

  • ResNet(Residual Network)은 솔루션 중 하나입니다. GoogLeNet에 이어 Residual Network는 ImageNet 대회에서 3.57%의 오류율로 1위를 차지하며 처음으로 인간 오류율보다 낮은 수준에 도달했습니다.
    여기에 이미지 설명을 삽입하세요.
3.2.2 잔여 모듈
  • 잔여 네트워크는 그림과 같이 주로 여러 개의 잔여 모듈로 구성됩니다. Residual 모듈은 두 개의 컨볼루션 레이어를 포함합니다. 컨볼루션의 첫 번째 레이어 뒤에 ReLU 활성화 함수가 옵니다. 컨볼루션의 두 번째 레이어는 활성화 함수에 직접 연결되지 않습니다. 해당 출력은 항등 맵에 추가된 후 ReLU 활성화에 연결됩니다. 함수는 잔여 모듈의 출력으로 사용됩니다. 여기의 항등 매핑은 실제로 잔여 모듈의 입력을 직접 "리드"하고 이를 두 컨볼루셔널 레이어의 출력에 추가합니다. 여기서 "추가"는 "비트별 추가", 즉 해당 채널과 해당 위치를 추가하는 것을 의미합니다. 분명히 이를 위해서는 입력 채널 수와 채널 크기가 이후 출력과 완전히 일치해야 합니다. 컨볼루션의 두 레이어. 잔여 모듈의 입력이 다음과 같이 표현 되면에프 (X)为:
    F ′ ( X ) = F ( X ) + X F'(X) = F(X) + X에프 (엑스)=에프 ( 엑스 )+엑스
    이미지 설명을 추가해주세요
  • 여기서의 아이덴티티 매핑은 회로의 "단락"처럼 느껴지는데 왜 이렇게 설계되었나요?
  • 첫째, "단락"을 통해 기울기가 거의 감쇠 없이 잔여 모듈로 역전송될 수 있어 기울기가 사라져서 발생하는 부작용을 제거합니다. 둘째, 앞서 말했듯이 열화 현상으로 인해 k 레이어 신경망에 한 레이어를 추가하여 k+1 레이어가 된 후에는 신경망의 성능이 향상되지 않을 뿐만 아니라 저하될 수도 있습니다. 잔차 네트워크의 설계 아이디어는 잔차 모듈을 추가하여 신경망의 깊이를 높이는 것입니다. Residual 모듈에는 ID 매핑이 있으므로 신경망의 이전 k 레이어의 출력이 직접 "참조"되고 Residual 모듈의 F(X) 부분은 "보조" 역할을 수행하는 것과 동일합니다. 이전 k에 대한 업 레이어 신경망의 부족한 부분을 출력으로 함께 추가합니다. 이는 이전 k-layer 신경망의 정보를 잘 유지하고 있을 뿐만 아니라 새로 추가된 잔여 모듈을 통해 새로운 보충 정보를 제공하므로 신경망의 성능 향상에 도움이 됩니다. 잔차 네트워크는 일석이조라고 할 수 있는 잔차 모듈을 도입하여 그래디언트 소멸 현상과 네트워크 열화 현상을 동시에 해결했다고 할 수 있습니다.
3.2.3 잔여 네트워크
  • 잔여 모듈의 항등 부분에는 학습 매개 변수가 없으므로 F(X) 부분에만 학습해야 하는 매개 변수가 있습니다.F ′ ( X ) F'(X)에프 (X)를이상적인 결과로 간주하면F(X) = F′(X) −에프 ( 엑스 )=에프 (엑스)-X 는 오차의 추정치와 동일하며, Residual Network는 Residual 모듈을 계층별로 추가하여 점차적으로 추정 오차를 줄여가므로 Residual Network라고 합니다.

이미지 설명을 추가해주세요
이미지 설명을 추가해주세요

  • 위 그림 3의 점선은 다른 ID 매핑과 다릅니다. 실선으로 그린 ​​ID 맵은 이전 잔여 모듈의 출력인 실제 ID 맵을 직접 참조하는 반면, 점선으로 그린 ​​ID 맵은 일부 변환이 필요합니다.
  • Residual 모듈의 출력은 ID 맵이고 두 Convolutional 레이어의 출력은 비트 단위로 추가된 후 활성화 함수에 연결됩니다. 비트 단위 추가에는 동일한 채널 수와 동일한 채널 크기가 필요합니다. 점선으로 표시된 레지듀얼 모듈에서는 첫 번째 콘볼루션 커널의 스텝 크기가 2로 채널 크기의 너비와 높이가 절반으로 줄어들었으며, 콘볼루션 커널의 개수도 입력 채널의 개수와 다르다. . , 이는 잔여 모듈의 컨벌루션 레이어의 출력이 항등 매핑의 출력에 직접 추가될 수 없음을 의미합니다. 이를 위해서는 출력의 수와 채널 크기가 컨벌루션 계층의 출력과 일치하도록 ID 매핑을 변환해야 합니다. 어떻게 변형하나요? 간단한 방법은 1×1 컨볼루션 레이어를 아이덴티티 매핑에 추가하는 것입니다. 이 레이어의 단계 크기와 컨볼루션 커널 수는 컨볼루션 레이어와 일치하므로 두 개를 비트 단위로 직접 추가할 수 있습니다.
  • 또 한 가지 설명해야 할 점이 있는데, 그림에 표시된 잔여 네트워크에서는 GoogLeNet과 같이 출력 레이어 앞의 완전 연결 레이어 대신 평균 풀링을 사용하지만 여기서는 전역 평균 풀링을 사용합니다. 즉, 전역 평균 풀링 후에는 각 채널이 단지 하나의 평균이 됩니다. 즉, 채널의 크기가 1×1이 됩니다. 이는 채널을 대표 평균값으로 대체하는 것과 동일하며, 그 효과는 학습해야 하는 매개변수의 수를 효과적으로 줄일 뿐만 아니라 신경망의 성능을 향상시킵니다.

4. 요약

이미지 설명을 추가해주세요

  • BP 알고리즘은 역전파(back propagation) 방식을 사용하여 출력 레이어에서 입력 레이어로의 기울기를 레이어별로 신경망의 각 레이어로 역전파하는데, 신경망의 레이어 수가 상대적으로 많을 경우 기울기 값이 점차적으로 감쇠될 수 있습니다. 접근법이 0보다 작으므로 상대적으로 입력 레이어에 가까운 뉴런의 가중치를 보정할 수 없어 훈련 목적을 달성할 수 없습니다. 이러한 현상을 Vanishing Gradient 문제라고 합니다.

  • Vanishing Gradient 문제의 영향을 제거하기 위해 몇 가지 솔루션이 제안되었습니다.

  • 이러한 현상은 활성화 함수가 시그모이드 함수를 사용할 때 특히 심각합니다. BP 알고리즘에서는 각 전파에 활성화 함수의 도함수를 곱해야 하고, 시그모이드 함수의 도함수 값은 일반적으로 상대적으로 작아서 그럴 가능성이 더 높기 때문입니다. 그래디언트 소멸 문제가 발생합니다. 시그모이드 함수를 ReLU 활성화 함수로 대체하는 것은 기울기 소실 문제를 제거하는 효과적인 방법입니다. 왜냐하면 ReLU 함수의 입력이 0보다 크면 그 도함수 값이 1이 되고 도함수를 곱해도 기울기가 발생하지 않기 때문입니다. 역전파 과정에서 활성화 함수가 사라집니다. 이것이 ReLU 활성화 함수가 수년 동안 널리 사용된 이유 중 하나입니다.

  • GoogLeNet에서는 Vanishing Gradient 문제를 해결하기 위해 ReLU 활성화 함수를 사용하는 것 외에 세 개의 출력도 신경망의 서로 다른 위치에 설정하고 손실 함수는 세 부분을 결합하여 Vanishing Gradient의 부작용을 줄입니다. 문제. GoogLeNet은 직렬로 연결된 여러 개의 Inception 모듈로 구성되며, 각 Inception 모듈은 서로 다른 크기의 컨볼루션 커널을 사용하여 서로 다른 세분성의 기능을 통합합니다. 동시에 정보 압축에 1×1 컨볼루션 커널이 사용되어 훈련 매개변수를 효과적으로 줄이고 훈련 속도를 높입니다.

  • 원칙적으로 신경망이 깊을수록 성능이 좋아져야 하지만, 일부 실험에서는 네트워크가 어느 정도 깊어지면 훈련 세트에서도 네트워크가 깊어질수록 성능이 떨어지는 것으로 나타났습니다. 네트워크 저하를 위해. 이는 비교적 복잡한 문제로 단순히 경사도가 사라져서 발생하는 문제가 아니며, 아직 이론적으로 분석하고 설명해야 할 부분입니다.

  • 네트워크 성능 저하 문제를 해결하기 위해 Residual 네트워크인 ResNet이 제안되었습니다. Residual Network는 직렬로 연결된 여러 개의 Residual 모듈로 구성되며, 각 Residual 모듈은 두 개의 Convolutional 레이어를 포함하며 Identity Mapping과 Convolutional 레이어의 출력을 통해 비트 단위로 추가됩니다. 그라디언트 소멸을 제거한다는 관점에서 잔여 네트워크는 ID 매핑의 존재로 인해 모든 잔여 모듈에 그라디언트를 전달할 수 있습니다. 네트워크 저하를 제거한다는 관점에서 잔여 네트워크는 존재로 인해 모든 잔여 모듈에 그라디언트를 전달할 수 있습니다. ID 매핑의 잔차 모듈을 추가하면 이전 신경망의 출력을 직접 "참조"하며, 잔차 모듈의 F(X) 부분은 이전 신경망의 결함을 보완하기 위한 "보조" 역할을 수행하는 것과 같습니다. 신경망 출력으로 합산되어 이전 신경망의 정보를 잘 유지하고 있을 뿐만 아니라 새로 추가된 잔여 모듈을 통해 새로운 보충 정보를 제공하므로 신경망의 성능 향상에 도움이 됩니다.

おすすめ

転載: blog.csdn.net/sgsgkxkx/article/details/133137143