자동 엔코더 변환


10

방금 자동 인코더 변환에 관한 Geoff Hinton의 논문을 읽었습니다.

Hinton, Krizhevsky 및 Wang : 자동 인코더 변환 . 인공 신경 네트워크 및 기계 학습에서, 2011.

이런 식으로 장난하고 싶습니다. 그러나 그것을 읽은 후에는 실제로 그것을 구현할 수있는 방법에 대한 논문에서 충분한 세부 정보를 얻을 수 없었습니다.

  • 입력 픽셀과 캡슐 간의 매핑이 어떻게 작동하는지 아는 사람이 있습니까?
  • 인식 장치에서 정확히 무슨 일이 일어나야합니까?
  • 어떻게 훈련해야합니까? 모든 연결 사이의 표준 백 프롭입니까?

이것 또는 이와 유사한 소스 코드에 대한 링크가 더 좋습니다.


저자에게 연락을 시도 했습니까? 어쩌면 그들은 온라인에서 무언가를 이용할 수 있습니다.
Ricardo Cruz

답변:


4

설명을 돕기 위해 텐서 흐름 코드 예제를 모았습니다 (전체 작동 코드는이 요지에 있습니다 ). 이 코드는 링크 한 논문의 섹션 2의 첫 부분에서 캡슐 네트워크를 구현합니다.

N_REC_UNITS = 10
N_GEN_UNITS = 20
N_CAPSULES = 30

# input placeholders
img_input_flat = tf.placeholder(tf.float32, shape=(None, 784))
d_xy = tf.placeholder(tf.float32, shape=(None, 2))

# translate the image according to d_xy
img_input = tf.reshape(img_input_flat, (-1, 28, 28, 1))
trans_img = image.translate(img_input, d_xy)
flat_img = tf.layers.flatten(trans_img)

capsule_img_list = []

# build several capsules and store the generated output in a list
for i in range(N_CAPSULES):
    # hidden recognition layer
    h_rec = tf.layers.dense(flat_img, N_REC_UNITS, activation=tf.nn.relu)
    # inferred xy values
    xy = tf.layers.dense(h_rec, 2) + d_xy
    # inferred probability of feature
    p = tf.layers.dense(h_rec, 1, activation=tf.nn.sigmoid)
    # hidden generative layer
    h_gen = tf.layers.dense(xy, N_GEN_UNITS, activation=tf.nn.relu)
    # the flattened generated image
    cap_img = p*tf.layers.dense(h_gen, 784, activation=tf.nn.relu)

    capsule_img_list.append(cap_img)

# combine the generated images
gen_img_stack = tf.stack(capsule_img_list, axis=1)
gen_img = tf.reduce_sum(gen_img_stack, axis=1)

입력 픽셀과 캡슐 간의 매핑이 어떻게 작동하는지 아는 사람이 있습니까?

이것은 네트워크 구조에 따라 다릅니다. 이 논문의 첫 번째 실험 (및 위의 코드)에서 각 캡슐에는 전체 입력 이미지를 포함하는 수용 필드가 있습니다. 이것이 가장 간단한 배열입니다. 이 경우 입력 이미지와 각 캡슐의 첫 번째 숨겨진 레이어 사이에 완전히 연결된 레이어입니다.

대안 적으로, 캡슐 수용 필드는 그 논문의 후반 실험에서와 같이 보폭을 갖는 CNN 커널과 유사하게 배열 될 수있다.

인식 장치에서 정확히 무슨 일이 일어나야합니까?

인식 장치는 각 캡슐의 내부 표현입니다. 각 캡슐은이 내부 표현을 사용하여 p, 캡슐의 특징이 존재할 확률 및 xy추정 된 번역 값을 계산합니다. 이 백서의 그림 2는 네트워크가 xy올바르게 사용하고 있는지 확인하기위한 점검 입니다.

어떻게 훈련해야합니까? 모든 연결 사이의 표준 백 프롭입니까?

특히 생성 된 출력과 원본 간의 유사성을 강제하는 손실을 사용하여 자동 인코더로 학습해야합니다. 평균 제곱 오류는 여기서 잘 작동합니다. 그 외에도, 백프로 프를 사용하여 그라디언트 디센트를 전파해야합니다.

loss = tf.losses.mean_squared_error(img_input_flat, gen_img)
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.