Wolfram 언어

신경망의 내부 시각화하기

훈련된 이미지 분류 네트워크의 내부 동작을 이해하기 위해 네트워크의 신경 세포가 반응하는 이미지의 특징을 시각화할 수 있습니다.

훈련된 네트워크를 로드합니다.

첫 번째 컨볼루션 레이어에서 뉴런의 이미지 특징은 단순히 컨볼루션 커널에 의해 주어집니다.

이러한 뉴런은 다양한 방향의 그레이 스케일이나 채색된 가장자리 및 직선 등 낮은 수준의 특징을 부호화합니다.

하지만 이런 간단한 방법은 네트워크 처리 체인의 훨씬 아래에 위치하는 층 중 뉴런에는 사용할 수 없습니다. Google의 Deep Dream 알고리즘을 사용하여 임의의 입력 이미지의 신경 특징을 생성할 수 있습니다.

먼저 시각화하려는 층과 특징을 지정합니다.

뉴런이 무엇을 부호화하는지에 대해 알기 위해 지정된 층에서 네트워크를 잘라내고 지정된 뉴런의 활동 제곱의 합계를 추출하는 레이어를 추가합니다.

네트워크의 역전파 기울기에 의해서 임의의 입력 영상을 정기적으로 업데이트함으로써 이 네트워크의 출력을 최대화하면, 해당 뉴런을 주로 자극하는 이미지가 생성됩니다. 결과의 이미지는 따라서 뉴런이 반응하는 특징을 나타냅니다.

모든 스케일에서 랜덤인 초기 이미지를 생성합니다.

NetPortGradient["Input"] 명령어는 네트워크의 입력 포트에서 역전파 기울기를 부여합니다. 다음 코드는 최대 기울기 계수를 1/8로 정규화하고 이를 이미지로 변환합니다.

위의 기울기 이미지에서 이미지를 반복적으로 업데이트하기 전에 작은 오프셋에서 이미지를 이동하는 지터 함수를 도입할 필요가 있습니다.

랜덤 지터를 다음의 루프에 통합하는 것은 역전파의 국소적인 인공물 분산에 도움이 되어 더 정규화된 이미지를 촉진합니다.

첫 번째 임의의 이미지를 256회 업데이트하면 다음의 이미지가 주어집니다. 문제의 뉴런은 작은 새 또는 닭을 부호화 한 것처럼 보입니다.

다른 층의 다른 특징에 대해 위 절차를 자유롭게 반복해 보길 바랍니다. 얕은 층에 있는 뉴런은 텍스처와 같은 간단한 특징을 부호화하는 반면, 깊은 층에 있는 뉴런은 동물의 얼굴과 같은 보다 복잡한 특징을 부호화하는 것을 알 수 있을 것입니다.

시작 층 3b의 특징을 봅니다.

시작 층 4b의 특징을 봅니다.

관련 예제

de en es fr ja pt-br zh