iOSと(深層)強化学習

1ae8fc4f63ab4770dd4545006489234c?s=47 yuky_az
August 31, 2018

 iOSと(深層)強化学習

iOSDC2018における、「iOSに深層強化学習は実装できるのか?」
というテーマの発表です。

発表者: 我妻幸長(@yuky_az)

Sec. 1: 強化学習とは?
Sec. 2: Swiftで強化学習
Sec. 3: Accelerate Frameworkによるニューラルネットワーク
Sec. 4: Swiftで深層強化学習

発表に使用した動画はこちら。
【Q学習でCart Pole】
https://youtu.be/lugIwpsSmBk

【Deep Q-NetworkでCart Pole】
https://youtu.be/hgDTCEZKxb8

【ぶるぶる移動作戦】
https://youtu.be/NsSEGsJokdg

【スイッチ作戦】
https://youtu.be/kqECbWKkq98

【カウンターアタック】
https://youtu.be/zIR0pw1AlKk

1ae8fc4f63ab4770dd4545006489234c?s=128

yuky_az

August 31, 2018
Tweet

Transcript

  1. 18.

    ʜ ঢ়ଶ st ϓϨʔϠʔͷҐஔ ϓϨʔϠʔͷ଎౓ ఢΩϟϥͷҐஔ ఢΩϟϥͷ଎౓ ɹ2 st, ߦಈ

    ɹ2 st, ߦಈ ɹ2 st, ߦಈ Deep Q-NetworkʢDQNʣ χϡʔϥϧωοτϫʔΫͰɺঢ়ଶ͔Β֤ߦಈͷ2஋ΛٻΊΔ
  2. 19.

    ʜ ঢ়ଶ st ϓϨʔϠʔͷҐஔ ϓϨʔϠʔͷ଎౓ ఢΩϟϥͷҐஔ ఢΩϟϥͷ଎౓ ɹ2 st, ߦಈ

    ɹ2 st, ߦಈ ɹ2 st, ߦಈ Deep Q-Networkͷֶश ޡࠩͷٯ఻೻ ޡࠩ ใु ׂҾ཰Y࣍ͷঢ়ଶͰ࠷େͷ2஋ݱࡏͷ2஋ 
  3. 22.

    ؀ڥͷߏங 4QSJUF,JUΛ࢖ͬͯ%ͷ$BSUͱ1PMFΛ࡞੒ $BSUͱ1PMFΛKPJOUͰ઀ଓ͠ɺॏྗ͸1PMFʹͷΈʹద༻ cart = SKSpriteNode(imageNamed: "robot_normal.png") cart.size = cartSize

    cart.physicsBody = SKPhysicsBody(rectangleOf: cartSize) cart.physicsBody?.affectedByGravity = false pole = SKShapeNode(rectOf: poleSize) pole.physicsBody = SKPhysicsBody(rectangleOf: poleSize) let joint = SKPhysicsJointPin.joint(… self.addChild(pole) self.addChild(cart) self.physicsWorld.add(joint)
  4. 32.

    ߦྻੵ         º

    ߦྻੵ   ߦ ྻ Y Y Y Y 
  5. 36.

    #-"4ʢ#BTJD-JOFBS"MHFCSB4VCQSPHSBNTʣ ߦྻϕΫτϧΛද͢ܕɺMB@PCKFDU@U ഑ྻ͔ΒߦྻΛੜ੒ let mat = la_matrix_from_double_buffer(array, rows, cols, cols,

    la_hint_t(LA_NO_HINT), la_attribute_t(LA_DEFAULT_ATTRIBUTES)) ߦྻੵ la_matrix_product(leftMat, rightMat) సஔ la_transpose(mat)
  6. 38.

    ʜ ঢ়ଶ st ϓϨʔϠʔͷҐஔ ϓϨʔϠʔͷ଎౓ ఢΩϟϥͷҐஔ ఢΩϟϥͷ଎౓ ɹ2  st

    , ߦಈ ɹ2  st , ߦಈ ɹ2  st , ߦಈ ٯ఻೻ʹΑΔֶश Deep Q-NetworkʢDQNʣ ૚
  7. 39.

    χϡʔϥϧωοτϫʔΫͷߏங ߦྻੵͷԋࢉࢠΛఆٛ public func *(left: la_object_t, right: la_object_t) -> la_object_t

    { return la_matrix_product(left, right) } ֤૚ΛΫϥεͱ࣮ͯ͠૷ class MiddleLayer: BaseLayer{ … } సஔͷ࣮૷ extension la_object_t { var trans : la_object_t { return la_transpose(self) } }
  8. 40.

    χϡʔϥϧωοτϫʔΫͷߏங ॱ఻೻ͷϝιου func forward(x: la_object_t) -> la_object_t { let u_mat

    = x_mat * self.w + self.b let y = sigmoid(u: u) return y } ٯ఻೻ͷϝιου func backward(t: la_object_t) -> la_object_t { let delta = self.y - t self.dW = self.x.trans * delta self.db = delta let dx = delta * self.w.trans return dx }