กำลังแปลง AutoEncoders


10

ฉันเพิ่งอ่านบทความของ Geoff Hinton เกี่ยวกับการเปลี่ยนระบบอ่านรหัสอัตโนมัติ

Hinton, Krizhevsky และ Wang: กำลังเปลี่ยนรูปตัวเข้ารหัสอัตโนมัติ ในเครือข่ายประสาทเทียมและการเรียนรู้ของเครื่อง, 2011

และอยากจะเล่นกับอะไรแบบนี้ แต่เมื่ออ่านมันฉันไม่ได้รับรายละเอียดเพียงพอจากบทความเกี่ยวกับวิธีการใช้งานจริง

  • ไม่มีใครรู้ว่าการทำแผนที่ระหว่างพิกเซลอินพุตกับแคปซูลควรทำงานอย่างไร
  • สิ่งที่ควรเกิดขึ้นในหน่วยการรู้จำ?
  • ควรฝึกอบรมอย่างไร มันเป็นแค่เสาหลังมาตรฐานระหว่างการเชื่อมต่อทุกครั้งหรือไม่

ยิ่งไปกว่านั้นจะเป็นลิงค์ไปยังซอร์สโค้ดบางตัวสำหรับสิ่งนี้หรือสิ่งที่คล้ายกัน


คุณได้ลองติดต่อผู้เขียนหรือไม่? บางทีพวกเขาอาจมีบางสิ่งบางอย่างพร้อมใช้งานออนไลน์
Ricardo Cruz

คำตอบ:


4

ฉันได้รวบรวมตัวอย่างรหัส tensorflow เพื่อช่วยอธิบาย (รหัสการทำงานที่สมบูรณ์อยู่ในส่วนสำคัญนี้) รหัสนี้ใช้เครือข่ายแคปซูลจากส่วนแรกของส่วนที่ 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)

ไม่มีใครรู้ว่าการทำแผนที่ระหว่างพิกเซลอินพุตกับแคปซูลควรทำงานอย่างไร

ขึ้นอยู่กับโครงสร้างเครือข่าย สำหรับการทดลองครั้งแรกในกระดาษนั้น (และรหัสด้านบน) แต่ละแคปซูลมีฟิลด์ที่เปิดกว้างซึ่งรวมถึงภาพอินพุตทั้งหมด นั่นเป็นวิธีที่ง่ายที่สุด ในกรณีนี้มันเป็นเลเยอร์ที่เชื่อมต่ออย่างสมบูรณ์ระหว่างภาพอินพุตและเลเยอร์แรกที่ซ่อนอยู่ในแต่ละแคปซูล

อีกทางหนึ่งช่องรับแคปซูลสามารถจัดเรียงได้มากเช่นเมล็ดของซีเอ็นเอ็นที่มีความก้าวหน้าเช่นเดียวกับการทดลองในภายหลังในกระดาษนั้น

สิ่งที่ควรเกิดขึ้นในหน่วยการรู้จำ?

หน่วยการรับรู้เป็นตัวแทนภายในที่แต่ละแคปซูลมี แต่ละแคปซูลใช้การแทนค่าภายในนี้เพื่อคำนวณpความน่าจะเป็นที่คุณสมบัติของแคปซูลปรากฏอยู่และxyค่าการแปลที่อนุมาน รูปที่ 2 ในกระดาษนั้นเป็นการตรวจสอบเพื่อให้แน่ใจว่าเครือข่ายกำลังเรียนรู้การใช้งานxyอย่างถูกต้อง (เป็น)

ควรฝึกอบรมอย่างไร มันเป็นแค่เสาหลังมาตรฐานระหว่างการเชื่อมต่อทุกครั้งหรือไม่

โดยเฉพาะอย่างยิ่งคุณควรฝึกมันเป็นตัวเข้ารหัสอัตโนมัติโดยใช้การสูญเสียที่บังคับให้มีความคล้ายคลึงกันระหว่างผลลัพธ์ที่สร้างและต้นฉบับ ความคลาดเคลื่อนกำลังสองเฉลี่ยหมายความว่าทำงานได้ดีที่นี่ นอกเหนือจากนั้นใช่คุณจะต้องเผยแพร่การไล่ระดับสีด้วย backprop

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.