Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ニューラルFM音源

Fadis
November 18, 2017

 ニューラルFM音源

畳み込みニューラルネットワークを使って与えられた音に近い音色を奏でるFM音源のパラメータを探す方法を解説します
これは2017年11月18日に行われた 第8回 カーネル/VM探検隊@関西の発表資料です。

Fadis

November 18, 2017
Tweet

More Decks by Fadis

Other Decks in Programming

Transcript

  1. χϡʔϥϧ'.Իݯ
    NAOMASA MATSUBAYASHI

    View Slide

  2. '.Իݯ
    प೾਺มௐ '.
    ΛԠ༻ͯ͠
    গͳ͍ύϥϝʔλͰΞίʔεςΟοΫͳָثͷԻ৭Λ࠶ݱ͢Δ
    ిࢠָثͷԻ৭ͷੜ੒ख๏
    ιϑτ΢ΣΞͰԻָΛԋ૗͢Δ͜ͱ͕೉͔ͬͨ͠
    ੈلͷ1$΍ήʔϜػʹ
    ͜ΕΛߦ͏ͨΊͷઐ༻ͷϋʔυ΢ΣΞ͕Α͘ࡌ͍ͬͯͨ

    View Slide

  3. ຊ෺ͷָثͷΑ͏ͳԻΛ
    ࿥ԻσʔλΛϝϞϦʹ࣋ͭ͜ͱͳ͘
    खଓ͖తʹੜ੒͍ͨ͠
    গͳ͍ύϥϝʔλͰ
    ༷ʑͳָثͷԻ৭ʹରԠ͍ͨ͠
    '.Իݯͷૂ͍

    View Slide

  4. ָثͷΑ͏ͳԻͱ͸

    View Slide

  5. $
    $
    $
    $






    ϐΞϊͷ$ͷԻͷप೾਺ղੳͷ݁Ռ
    $ $

    View Slide

  6. $
    $
    $
    $






    $ $
    $ͷप೾਺)[ͷ੒෼
    جԻ
    ϐΞϊͷ$ͷԻͷप೾਺ղੳͷ݁Ռ

    View Slide

  7. $
    $
    $
    $






    $ $
    )[ͷ੔਺ഒͷ੒෼
    ഒԻ
    ϐΞϊͷ$ͷԻͷप೾਺ղੳͷ݁Ռ

    View Slide

  8. $
    $
    $
    $




    $ $
    ؚ·Ε͍ͯΔഒԻ͕มΘΔͱ
    ผͷָثͷԻʹฉ͑͜Δ
    $ͷप೾਺)[ͷ੒෼
    ϚϦϯόͷ$ͷԻͷप೾਺ղੳͷ݁Ռ

    View Slide

  9. $
    $
    $
    $





    $ $
    Ի৭ʹؚ·ΕΔഒԻ͸࣌ؒͰมԽ͢Δ
    େ఍ͷָث͸جԻ͔Β཭ΕͨഒԻ͕ઌʹফ͑Δ
    ϐΞϊͷ$ͷԻͷप೾਺ղੳͷ݁Ռ

    View Slide

  10. ຊ෺ͷָثͷΑ͏ͳԻΛ૗ͰΔ
    ؔ਺ʹඞཁͳಛ௃
    جԻͷप೾਺Ͱ܁Γฦ͞ΕΔपظؔ਺Ͱ͋Δ
    ࣌ؒͱͱ΋ʹৼ෯͕มԽ͢Δ
    ࣌ؒͱͱ΋ʹؚ·ΕΔഒԻ͕มԽ͢Δ
    ؚ·ΕΔഒԻͷप೾਺ͱେ͖͞͸
    ؔ਺ͷҾ਺ͰίϯτϩʔϧͰ͖Δ

    View Slide

  11. प೾਺มௐ '.

    ৴߸೾ͷ܏͖͕
    ൖૹ೾ͷप೾਺ͷมԽʹม׵͞ΕΔ
    प೾਺͕ߴ͍ प೾਺͕௿͍
    ਖ਼ͷ܏͖ ෛͷ܏͖

    View Slide

  12. ৴߸೾ͱൖૹ೾ͷप೾਺͕͍ۙͱ
    ৴߸೾͸ൖૹ೾Λ࿪·ͤΔಇ͖Λ͢Δ
    प೾਺มௐ '.

    View Slide







  13. $$ $ $ $
    ЋΛม͑ͳ͕Βप೾਺ղੳΛߦͳͬͨ݁Ռ
    Ћ
    ৴߸೾ͷৼ෯͕େ͖͍΄Ͳ೾ܗ͕࿪ΜͰഒԻ͕ग़Δ

    View Slide







  14. $$ $ $ $
    ТTΛม͑ͳ͕Βप೾਺ղੳΛߦͳͬͨ݁Ռ
    ТT
    ৴߸೾ͷप೾਺ʹΑͬͯഒԻ͕ग़ΔҐஔ͕มΘΔ

    View Slide

  15. ͜ΕΛར༻ͯ͠
    ຊ෺ͷָثͷΑ͏ͳ೾ܗΛ࡞Ζ͏ͱ͍͏ͷ͕
    FMԻݯ

    View Slide

  16. ΦϖϨʔλ
    प೾਺มௐ
    Τϯϕϩʔϓ
    ೖྗΛप೾਺มௐͯ͠
    ΤϯϕϩʔϓͰৼ෯Λ࣌ؒมԽͤͯ͞
    ग़ྗ͢ΔΑ͏ͳؔ਺Λ
    '.ԻݯͰ͸ΦϖϨʔλͱݺͿ

    View Slide

  17. प೾਺มௐ
    Τϯϕϩʔϓ
    प೾਺มௐ
    Τϯϕϩʔϓ

    ΦϖϨʔλͷग़ྗ͸
    ผͷΦϖϨʔλͷೖྗʹͰ͖Δ
    ΦϖϨʔλ

    View Slide

  18. प೾਺มௐ
    Τϯϕϩʔϓ
    प೾਺มௐ
    Τϯϕϩʔϓ

    ഒԻͷຊ਺͕ঃʑʹ
    ݮ͍ͬͯ͘ͷΛ
    ࠶ݱ͢Δ
    Իͷେ͖͕͞ঃʑʹ
    ݮ͍ͬͯ͘ͷΛ
    ࠶ݱ͢Δ
    ͭͷΤϯϕϩʔϓͰ
    ഒԻͷ࣌ؒมԽͱԻྔͷ࣌ؒมԽΛ
    දݱͰ͖Δ
    ΦϖϨʔλ

    View Slide

  19. प೾਺มௐ
    Τϯϕϩʔϓ
    प೾਺มௐ
    Τϯϕϩʔϓ
    प೾਺มௐ
    Τϯϕϩʔϓ
    प೾਺มௐ
    Τϯϕϩʔϓ
    ࣮ࡍͷ'.ԻݯͰ͸͞Βʹଟ͘ͷ
    ΦϖϨʔλΛܨ͛Δࣄ͕ଟ͍

    View Slide

  20. $$ $ $ $
    '.Իݯ
    ഒԻ͕࣌ؒมԽ͢Δ
    ΞίʔεςΟοΫͳָثͷΑ͏ͳ
    Ի৭Λग़ͤΔ

    View Slide

  21. OΦϖϨʔλͷ'.Իݯͷܭࢉࣜ
    OΦϖϨʔλ਺
    &JΤϯϕϩʔϓ
    TJجԻͷप೾਺ʹର͢Δഒ཰
    ЋJKΦϖϨʔλK͕ΦϖϨʔλJΛมௐ͢Δڧ͞
    ЌJग़ྗʹؚ·ΕΔΦϖϨʔλJͷ৴߸ͷׂ߹

    View Slide

  22. Ͳ͜Λ͍ͬͨ͡Β
    ཉָ͍͠ثͷԻ৭ʹۙ෇͘ͷ͔
    ͬ͞ͺΓΘ͔ΒΜ
    OΦϖϨʔλͷ'.Իݯͷܭࢉࣜ

    View Slide

  23. Ҩ఻త'.Իݯ
    NAOMASA MATSUBAYASHI
    ೥લʹൃදͨ͠ωλ

    View Slide

  24. αϯϓϦϯάԻΛप೾਺ղੳ
    ϥϯμϜͳҨ఻ࢠΛੜ੒
    ֤Ҩ఻ࢠΛ'.ԻݯͰԋ૗
    ֤Ҩ఻ࢠͷԻΛप೾਺ղੳ
    Ұ༷ަ伹ͱಥવมҟͰҨ఻ࢠΛੜ੒
    αϯϓϦϯάԻͱͷڑ཭Λܭࢉ
    ϧʔϨοτબ୒ͰݸମΛݫબ
    ࠷େ෼ղೳͰ
    ্ҐʹมԽ͕ݟΒΕͳ͍
    ͸͍
    ͍͍͑
    ෼ղೳΛ্͛Δ͔Ͳ͏͔Λ൑அ
    Ҩ఻తΞϧΰϦζϜͰ
    ༩͑ΒΕͨԻͱ͍ۙप೾਺੒෼ΛؚΉԻ͕ग़Δ
    '.ԻݯͷύϥϝʔλΛ୳͢

    View Slide

  25. $ cufind_fm_params -i ../Piano.mf.C4.aiff -o
    out -n 48 -m 6 -t 40 -w -8 -s 4 -c 1000
    real 163m42.037s
    user 139m52.715s
    sys 23m34.418s
    $
    ࣌ؒ෼ඵ
    04 ([email protected] MJOVY

    ίϯύΠϥ OWDD
    ''5ʹ࢖༻ͨ͠ϥΠϒϥϦ $V''5
    $16 *OUFM$PSFJ 4LZMBLF
    ()[ίΞ
    (16 OWJEJB(F'PSDF(59()[$6%"ίΞ
    ϝϞϦ IPTU(#EFWJDF(#
    αϯϓϦϯάσʔλͷ௕͞ ඵ L)[

    ऴྃ৚݅ ੈ୅໨ΛٻΊͨΒऴྃ
    ໰୊఺͕͔͔࣌ؒΔ

    View Slide

  26. ͳΔ΄Ͳ

    View Slide

  27. '.Իݯύϥϝʔλ
    ΦʔσΟΦσʔλ
    '.ԻݯͰԋ૗
    ͜ͷؔ਺͕
    ཉ͍͠
    '.Իݯͷٯؔ਺͕ཉ͍͠
    ղੳతʹٻΊΔͷ͸೉͍͕͠
    χϡʔϥϧωοτϫʔΫʹΑΔճؼͰ
    ٯؔ਺ͷۙࣅ͕ಘΒΕͳ͍͔

    View Slide

  28. χϡʔϥϧωοτϫʔΫ

    View Slide

  29. ܗࣜχϡʔϩϯ
    ೖྗ
    ೖྗ
    ೖྗ
    ॏΈX
    ॏΈX
    ॏΈX
    ೖྗΛෳ਺ड͚औͬͯ
    ॏΈΛ͔͚ͯ૯࿨ΛऔΓ
    ͦΕΛ׆ੑԽؔ਺ʹ௨ͨ݁͠ՌΛग़ྗ͢Δؔ਺
    ׆ੑԽؔ਺

    View Slide

  30. ׆ੑԽؔ਺
    ೖྗ͕͋Δᮢ஋ΑΓେ͖͍࣌ʹҎ্ͷ஋Λฦ͠
    ᮢ஋ҎԼͷ৔߹ʹΛฦ͢Α͏ͳԿΒ͔ͷؔ਺

    View Slide

  31. ೖྗ
    ೖྗ
    ೖྗ
    ग़ྗ
    ग़ྗ
    ग़ྗ
    ܗࣜχϡʔϩϯ͕͜Μͳ෩ʹ
    ܨ͕͍ͬͯΔؔ਺Λߟ͑Δ
    ֤઀ଓͷॏΈʹΑͬͯ
    ೖྗͱग़ྗͷؒʹ༷ʑͳؔ܎Λ࣋ͨͤΒΕΔ

    View Slide

  32. ޡࠩٯ఻೻
    Y
    Y
    Y
    ॏΈX
    ॏΈX
    ॏΈX
    ग़ྗZP
    㱠ظ଴͢Δग़ྗZ
    ͋ΔॏΈXͷܗࣜχϡʔϩϯʹ
    ஋YΛ௨ͯ͠ग़͖ͯͨ஋ZP͕ग़͖ͯͯཉ͍͠஋ͱҧͬͨ࣌
    ͜ͷχϡʔϩϯͷৼΔ෣͍Λظ଴͢Δ΋ͷʹ͚ۙͮΔͷ͸
    YͱZΛఆ਺ͱΈͳͯ͠
    ZͱZPͷڑ཭͕࠷খͱͳΔΑ͏ͳ
    ॏΈͷ஋Λ୳Δ໰୊ʹͳΔ

    View Slide

  33. ޯ഑߱Լ๏
    ZͱZP͕ͣΕ͍ͯΔ΄Ͳ
    େ͖ͳ஋ΛͱΔؔ਺& ZP
    Λఆٛ͢Δ
    &ͷΑ͏ͳؔ਺ΛΤϥʔؔ਺ͱݺͿ
    X
    & ZP

    ͜͜ʹߦ͖͍ͨ
    ͍·͜͜

    View Slide

  34. X
    & ZP

    ͜͜ʹߦ͖͍ͨ
    ͍·͜͜
    ࠓͷҐஔͷ܏͖ʹԊͬͯ
    XΛߋ৽͢Ε͹ྑ͍ͷͰ͸
    ޯ഑߱Լ๏
    ZͱZP͕ͣΕ͍ͯΔ΄Ͳ
    େ͖ͳ஋ΛͱΔؔ਺& ZP
    Λఆٛ͢Δ

    View Slide

  35. ޡࠩٯ఻೻
    ZP
    Y
    X X
    Τϥʔؔ਺ʹର͢Δ
    XͷӨڹ
    Τϥʔؔ਺ʹର͢Δ
    XͷӨڹ
    ط஌
    ͜ͷ෦෼Λग़ྗଆ͔Βॱ൪ʹٻΊ͍͚ͯ͹ྑ͍
    ܗࣜχϡʔϩϯ͕Կ૚΋ॏͳ͍ͬͯͯ΋
    ॏΈͷमਖ਼͕Ͱ͖Δ

    View Slide

  36. χϡʔϥϧωοτϫʔΫ
    ط஌ͷೖྗ ط஌ͷग़ྗ
    ?
    ະ஌ͷؔ਺͕͋ͬͯ
    ͦͷೖྗͱग़ྗͷ૊͕े෼ͳྔ͋Δͱ͖ʹ
    ະ஌ͷؔ਺Λۙࣅ͢Δؔ਺Λ
    ܭࢉͰٻΊΔࣄ͕Ͱ͖Δ

    View Slide

  37. ΑΓৄ͍͠ޡࠩٯ఻೻ͷ਺ֶతͳղઆ͸
    ΦϥΠϦʔ͔Βྑ͍ຊ͕ग़͍ͯΔ
    θϩ͔Β࡞ΔDeep Learning

    View Slide

  38. '.Իݯύϥϝʔλ
    ΦʔσΟΦσʔλ
    '.ԻݯͰԋ૗
    ͜ͷؔ਺͕
    ཉ͍͠
    '.Իݯͷύϥϝʔλͱ
    ͦͷԋ૗݁ՌͷΦʔσΟΦσʔλ͸
    େྔʹ༻ҙͰ͖Δط஌ͷೖग़ྗͰ͋Δ
    ΦʔσΟΦσʔλ͔Β
    '.ԻݯύϥϝʔλΛಘΔؔ਺͸
    ະ஌ͷؔ਺Ͱ͋Δ

    View Slide

  39. ֶशσʔλͷ༻ҙ

    View Slide

  40. ͜ͷͭͷԻɺฉ͖෼͚ΒΕ·͔͢
    ͦͷ
    Ի
    Ի

    View Slide

  41. ͜ͷͭͷԻɺฉ͖෼͚ΒΕ·͔͢
    ͦͷ
    Ի
    Ի

    View Slide

  42. ਓؒͷௌ֮͸
    ֤प೾਺ͷ೾ͷৼ෯͚ͩΛฉ͍͍ͯͯ
    Ґ૬Λฉ͍͍ͯͳ͍
    ྘ͷഒԻͷҐ૬͕ͣΕ͍ͯΔ͕
    ͦͷࣄΛ஌֮͢Δࣄ͸ग़དྷͳ͍

    View Slide

  43. प೾਺
    ࣌ࠁ
    '.ԻݯΛ
    ΦΫλʔϒ໨ͷϥ)[Ͱ໐Β͠
    ''5ʹ͔͚ͯεϖΫτϧը૾ΛಘΔ

    View Slide

  44. ΢ΣʔόʔɾϑΣώφʔͷ๏ଇ
    ਓؒͷޒײ͕஌֮͢Δྔ͸
    ࣮ࡍͷܹࢗʹର͓ͯ͠Αͦର਺ͷؔ܎ʹ͋Δ
    εϖΫτϧը૾ͷ͋Δ఺ͷ஋͕
    ͔͔ͩͬͨͩͬͨ͸
    ͔͔ͩͬͨͩͬͨൺ΂ͯ
    ૬ରతʹॏཁͰ͸ແ͍

    View Slide

  45. ͜ͷը૾ͷεϖΫτϧʹ͸
    ҎԼͷม׵͕͔͚ΒΕ͍ͯΔ

    View Slide

  46. ༗༻ͳԻ͕ग़Δൣғ
    '.Իݯύϥϝʔλͷۭؒͷ͏ͪ
    ΄ͱΜͲͷ෦෼͸Ի֊͕͸͖ͬΓ͠ͳ͍
    ϊΠζͷΑ͏ͳԻʹͳ͍ͬͯΔ

    View Slide

  47. χϡʔϥϧωοτϫʔΫʹૹΔԻ৭ͷੜ੒ʹ͸
    ҎԼͷ੍໿Λઃ͚Δ
    ൪໨ͷΦϖϨʔλ͸ඞͣجԻͷप೾਺ʹ͢Δ
    ग़ྗஈʹܨ͕͍ͬͯΔΦϖϨʔλͷ
    ΤϯϕϩʔϓͷϐʔΫλΠϜΛἧ͑Δ
    ൪໨Ҏ֎ͷΦϖϨʔλͷप೾਺͸
    جԻͷ੔਺ഒ͔Β͋·Γ֎Εͳ͍Α͏ʹ͢Δ
    ΦϖϨʔλ΁ͷೖྗͷ૯࿨͸Λ௒͑ͳ͍Α͏ʹ͢Δ
    ϑΟʔυόοΫೖྗͷৼ෯͸Λ௒͑ͳ͍Α͏ʹ͢Δ
    Τϯϕϩʔϓ͸ඵ͔Βඵͷؒʹճ͚ͩ࠷େ஋ͱͳΓ
    ͦͷޙ͸ݮগ͢Δ
    ൪໨ͷΦϖϨʔλͷԻ͸ඞͣग़ྗஈʹग़Δ
    ༗༻ͳԻ͕ग़Δൣғ

    View Slide

  48. ೖग़ྗͷؔ܎ΛҰҙʹ͢Δ
    ΦϖϨʔλ
    ΦϖϨʔλ
    ΦϖϨʔλ
    ग़ྗ
    ΦϖϨʔλ
    ΦϖϨʔλ
    ΦϖϨʔλ
    ग़ྗ
    ΦϖϨʔλͷฒͼॱ͕มΘ͚ͬͨͩͰ
    ಉ͡ܭࢉ͕ߦΘΕΔΑ͏ͳ৔߹
    ෳ਺ͷύϥϝʔλ͔Βಉ͡Ի͕ग़ͯ͘Δ
    ೖग़ྗͷؔ܎͕ҰҙͰͳ͍Α͏ͳσʔλ͸
    ֶश͕ऩଋ͠ͳ͍ݪҼͱͳΔ

    View Slide

  49. ಉ͡Ի͕ग़Δύϥϝʔλ͕།ҰʹͳΔΑ͏ʹ
    ҎԼͷ੍໿ΛՃ͑Δ
    ग़ྗஈʹܨ͕͍ͬͯΔΦϖϨʔλ͸
    ग़ྗஈͷϛΩαʔͷԻྔͰιʔτ͢Δ
    ग़ྗஈʹܨ͕͍ͬͯͳ͍ΦϖϨʔλ͸
    جԻʹରͯ͠Կഒͷप೾਺Ͱಈ͍͍ͯΔ͔ͱ
    ଞͷΦϖϨʔλ΁ೖྗϛΩαʔͷԻྔͷ૯࿨Ͱιʔτ͢Δ
    ϦϦʔελΠϜ͸ద౰ͳ࣌ؒʹݻఆ͢Δ
    ग़ྗʹର͢ΔӨڹ͕ஶ͘͠খ͍͞ΦϖϨʔλ͸θϩΫϦΞ͢Δ
    ೖग़ྗͷؔ܎ΛҰҙʹ͢Δ

    View Slide

  50. ೖྗ૚͔ΒεϖΫτϧը૾ΛಥͬࠐΜͰ
    ͦͷԻΛग़͢ͷʹ࢖ͬͨ
    '.Իݯύϥϝʔλͱͷڑ཭ͰॏΈΛमਖ਼
    ೖྗ૚
    '.ԻݯͰ໐Βͯ͠εϖΫτϧը૾Λ࡞Δ
    ཚ਺Ͱ'.ԻݯύϥϝʔλΛੜ੒
    ӅΕ૚
    ग़ྗ૚
    Τϥʔؔ਺
    ָثͷԻ
    ָثͷԻΛ
    ࠶ݱ͢Δ
    '.Իݯ
    ύϥϝʔλ
    ֶश ධՁ
    χϡʔϥϧωοτϫʔΫ

    View Slide

  51. ৞ΈࠐΈ
    χϡʔϥϧωοτϫʔΫ

    View Slide

  52. ৞ΈࠐΈ૚
    શ݁߹ ৞ΈࠐΈ
    ը૾ͷΑ͏ʹྡΓ߹ͬͨσʔλʹؔ࿈ੑ͕͋Δ৔߹
    ۙ๣਺ϐΫηϧΛ·ͱΊͨϑΟϧλ͕ॏཁͳ໾ׂΛՌͨ͢ࣄ͕ଟ͍
    શ݁߹ͷωοτϫʔΫ͔ΒֶशʹΑͬͯ
    ӈͷΑ͏ͳ઀ଓ͕ੜ·ΕΔͷΛ଴ͭΑΓ
    ࠷ॳ͔ΒӈͷΑ͏ͳݶΒΕͨཁૉ͔͠
    ઀ଓ͞Ε͍ͯͳ͍૚Λ࡞Ζ͏

    View Slide

  53. ϓʔϦϯά૚


    ϓʔϦϯά
    ݶΒΕͨྖҬͷதͰ࠷΋େ͖ͳ஋Λฦͨ͠
    χϡʔϩϯͷ஋͚ͩΛ࣍ͷ૚ʹ఻͑Δ
    ݶΒΕͨྖҬͷதͰ࠷΋େ͖ͳ஋Λฦͨ͠
    χϡʔϩϯͷ஋͚ͩΛ࣍ͷ૚ʹ఻͑Δ

    View Slide

  54. ਂ૚ֶश

    View Slide

  55. Shallow vs. Deep Sum-Product Networks
    [Olivier Delalleau and Yoshua Bengio, 2011]
    https://papers.nips.cc/paper/4350-shallow-vs-deep-sum-product-networks
    ಉ͡χϡʔϩϯΛ૿΍͢ͳΒ
    ૚Λ޿͘͢ΔΑΓ૚ͷ਺Λ૿΍͢ํ͕
    ΑΓෳࡶͳؔ਺ΛදݱͰ͖Δͱ͢Δ࿦จ

    View Slide

  56. ޯ഑ফࣦ໰୊
    ۃΊͯʹ͍ۙ
    ੵͳͷͰ͔͜͜Βઌ͕Ͳ͏ͳ͍ͬͯͯ΋
    ۃΊͯʹ͍ۙޯ഑ʹͳͬͯ͠·͏
    ޡࠩٯ఻೻ͷաఔͰޯ഑͕ແ͘ͳͬͯ͠·͍
    ͦΕΑΓ΋্ͷ૚ͷֶश͕ਐ·ͳ͘ͳΔ໰୊
    ଟ૚ͷχϡʔϥϧωοτϫʔΫͷ
    ֶश͸ࠔ೉ͱߟ͑ΒΕ͍ͯͨ

    View Slide

  57. ޯ഑ফࣦ໰୊
    ݹయతͳχϡʔϥϧωοτϫʔΫ͸
    ඍ෼Ͱ͖Δεςοϓؔ਺ͷ୅ΘΓͱͯ͠
    ׆ੑԽؔ਺ʹγάϞΠυؔ਺Λ࢖͍ͬͯͨ
    ͜͏͍͏ͱ͜ΖͰඍ෼͠Α͏ͱ͢Δͱ
    ܏͖͕ۃΊͯখ͘͞ͳΔ

    View Slide

  58. ReLU
    ׆ੑԽ͍ͯ͠ΔݶΓେ͖ͳޯ഑
    ׆ੑԽ͍ͯ͠Δχϡʔϩϯ͕ͭͰ΋͋Ε͹
    ׆ੑԽؔ਺͕ݪҼͰޯ഑͕ࣦΘΕΔ͜ͱ͸
    ແ͘ͳͬͨ
    Rectified linear units improve restricted boltzmann machines
    [Vinod Nair and Geoffrey E. Hinton, 2010]
    https://dl.acm.org/citation.cfm?id=3104425

    View Slide

  59. GoogLeNet
    ෳ਺Օॴͷग़ྗΛΤϥʔؔ਺ʹ௨ͯ͠
    ௕͍ωοτϫʔΫͷ్தͰ
    ޯ഑Λิڅ͢Ε͹ྑ͍
    ͔͜͜Βޡࠩٯ఻೻
    ͔͜͜Β΋
    ͬͪ͜΋
    Going Deeper with Convolutions
    [Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed,
    Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, Andrew
    Rabinovich, 2015]
    https://research.google.com/pubs/pub43022.html

    View Slide

  60. ϒϩοΫΛ௨͖ͬͯͨ஋ͱ
    ϒϩοΫͷೖྗΛࠞͥͯग़ྗ͢Δ
    ResNet
    Deep Residual Learning for Image Recognition
    [Kaiming He and Xiangyu Zhang and Shaoqing Ren and Jian Sun, 2015]
    https://arxiv.org/abs/1512.03385

    View Slide

  61. ResNet
    Deep Residual Learning for Image Recognition
    [Kaiming He and Xiangyu Zhang and Shaoqing Ren and Jian Sun, 2015]
    https://arxiv.org/abs/1512.03385
    ৞ΈࠐΈY
    ৞ΈࠐΈY
    3F-6
    3F-6
    Ճࢉ
    Yͷ৞ΈࠐΈͭΛ
    ϒϩοΫͱ͢Δ
    Լͷ৞ΈࠐΈͷޙ
    ׆ੑԽؔ਺ʹ௨͢લʹ
    ೖྗΛࠞͥΔ
    3F-6͸׆ੑԽ͍ͯ͠ΔݶΓ
    େ͖ͳޯ഑ΛऔΔͨΊ
    ੺ͷϧʔτͷޯ഑͸্૚Ͱ΋େ͖͘ͳΔ

    View Slide

  62. ωοτϫʔΫ͸௕͍ํ͕ෳࡶͳؔ਺ΛදͤΔ
    ResNetΛ࢖͑͹ޯ഑ফࣦ͸໰୊ʹͳΒͳ͍
    1୆ͷϚγϯʹ৐ΔൣғͰ΍͍ͬͯΔݶΓ
    ৳͹ͤΔͱ͜·Ͱ௕͍ResNetΛ࢖ͬͯ
    ௕͗͢Δͱ͍͏ࣄ͸ͳ͍Μ͡Όͳ͍͔ͳ
    '.Իݯ͸ଟ෼ෳࡶͳؔ਺ͳΜ͡Όͳ͍͔ͳ

    View Slide

  63. ࣮૷

    View Slide

  64. Caffe
    Φʔϓϯιʔεͳ
    σΟʔϓϥʔχϯάϑϨʔϜϫʔΫͷ1ͭ
    http://caffe.berkeleyvision.org/

    View Slide

  65. CUDAΛ࢖ͬͯGPUͰ
    χϡʔϥϧωοτϫʔΫͷ
    ֶशͱධՁΛߦ͏ࣄ͕Ͱ͖Δ
    Caffeͱιϑτ΢ΣΞFMԻݯΛ૊Έ߹ΘͤΔ
    GPUΛ࢖ͬͨ৔߹
    CPUଆ͸΄΅σʔλͷసૹʹઐ೦͢ΔࣄʹͳΓ
    Ϛϧνϓϩηοαͷ৔߹
    1ͭΛআ͍ͯ༡ΜͰ͍Δঢ়ଶʹͳΔ
    ࢒ΓͷϓϩηοαʹεϖΫτϧը૾ͷੜ੒Λͤͯ͞
    ग़དྷͨ෺͔ΒGPUʹ౤͛Ε͹
    ࣄલʹେྔͷεϖΫτϧը૾Λ༻ҙ͢Δඞཁ͕ແ͍

    View Slide

  66. void training_data_generator::poll() {
    bool active=true;
    constexpr size_t batch_size=15;
    constexpr size_t image_size=400*length;
    constexpr size_t config_size=config_length;
    const auto window=softfm::generate_window(1<<13);
    std::random_device seed_gen;
    resource_type resources(batch_size,192000,seed_gen());
    generate_training_data generator;
    while(1) {
    if(active) {
    std::vector pixels_(image_size*batch_size,0);
    std::vector configs_(config_size*batch_size,0);
    generator(window,pixels_.data(),configs_.data(),batch_size,resources);
    std::lock_guard lock(guard);
    configs.emplace(std::move(configs_));
    pixels.emplace(std::move(pixels_));
    if(pixels.size()==100)active=false;
    if(end)break;
    }
    else {
    std::lock_guardlock(guard);
    if(pixels.size()< 100)active=true;
    if(end) break;
    }
    }
    }
    FMԻݯͷεϖΫτϧը૾ͱઃఆͷϖΞΛ
    ແݶʹ࡞ΔεϨου

    View Slide

  67. template void FMAudio8Layer::DataLayerSetUp(
    const vector*>& bottom,const vector*>& top){
    CHECK_GT(batch_size_*size_,0)<<"oops";
    labels_.resize(batch_size_,0);
    auto &gen=softfm::training_data_generator::get();
    data_[pos_]=std::move(gen.get_pixels());
    vector label_shape(1,batch_size_);
    top[0]->Reshape(batch_size_,channels_,height_,width_);
    top[1]->Reshape(label_shape);
    added_data_.Reshape(batch_size_,channels_,height_,width_);
    added_label_.Reshape(label_shape);
    added_data_.cpu_data();
    added_label_.cpu_data();
    }
    template void FMAudio8Layer::Forward_cpu(
    const vector*>& bottom,const vector*>& top){
    top[0]->Reshape(batch_size_,channels_,height_,width_);
    top[1]->Reshape(batch_size_,1,1,1);
    top[0]->set_cpu_data(data_[pos_].data());
    top[1]->set_cpu_data(labels_.data());
    pos_=(pos_+1)%n_;
    auto &gen=softfm::training_data_generator::get();
    data_[pos_]=std::move(gen.get_pixels());
    }
    ੜ੒͞ΕͨFMԻݯͷεϖΫτϧը૾Λर͏ೖྗ૚

    View Slide

  68. layer {
    name: "data"
    type: "FMAudio8"
    top: "data"
    top: "dummy1"
    }
    layer {
    name: "label"
    type: "FMConfig8"
    top: "label"
    top: "dummy2"
    }
    layer {
    name: "conv_1"
    type: "Convolution"
    bottom: "data"
    top: "conv_1"
    ࣮૷ͨ͠ೖྗ૚Λ
    ωοτϫʔΫఆٛϑΝΠϧʹ
    ฒ΂Δ
    εϖΫτϧը૾͕
    ແݶʹ༙͍ͯ͘Δ૚
    '.Իݯͷઃఆ͕
    ແݶʹ༙͍ͯ͘Δ૚

    View Slide

  69. layer {
    name: "conv_1"
    type: "Convolution"
    bottom: "data"
    top: "conv_1"
    param {
    lr_mult: 1
    decay_mult: 1
    }
    param {
    lr_mult: 2
    decay_mult: 0
    }
    convolution_param {
    num_output: 64
    pad: 3
    kernel_size: 7
    stride: 2
    #4%ϥΠηϯεͰ഑෍͞Ε͍ͯΔ3FT/FUͷఆ͕ٛ
    طʹ͋ΔͷͰ
    ໯͖ͬͯͯઌ΄Ͳͷೖྗ૚ʹ͚ͬͭ͘Δ
    https://github.com/jay-mahadeokar/pynetbuilder

    View Slide

  70. layer {
    name: "loss/classifier_"
    type: "InnerProduct"
    bottom: "conv_1by1_1000"
    top: "loss/classifier_"
    param {
    lr_mult: 1
    decay_mult: 1
    }
    param {
    lr_mult: 2
    decay_mult: 0
    }
    inner_product_param {
    num_output: 104
    weight_filler {
    type: "xavier"
    }
    ग़ྗͷ਺͕
    '.Իݯύϥϝʔλͷ਺ʹ
    ͳΔΑ͏ʹ಺ੵΛͱͬͯ

    View Slide

  71. ࠷ޙʹ'.Իݯͷઃఆͱͷ
    ϢʔΫϦουڑ཭ΛٻΊΔ
    num_output: 104
    weight_filler {
    type: "xavier"
    }
    bias_filler {
    type: "constant"
    value: 0
    }
    }
    }
    layer {
    name: "loss/loss"
    type: "EuclideanLoss"
    bottom: "loss/classifier_"
    bottom: "label"
    top: “loss/loss"
    loss_weight: 1
    }

    View Slide

  72. ResNet͸૚ͷ਺Λൺֱతॊೈʹ
    ૿ݮͤ͞Δࣄ͕Ͱ͖Δ
    ݩͷ࿦จʹ͸
    CIFAR-10(Ұൠ෺ମೝࣝϕϯνϚʔΫ)ʹ͓͍ͯ
    152૚·Ͱ͸૚Λ૿΍͢΄Ͳ
    ྑ͍݁Ռ͕ಘΒΕͨ͢Δ࣮ݧ݁Ռ͕ࡌ͍ͬͯΔ
    ͳͥResNet-36ͳͷ͔

    View Slide

  73. GeForce GTX1070
    ࠓճ࢖ͬͨGPU

    View Slide

  74. $ nvidia-smi
    Thu Nov 16 00:54:35 2017
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 384.90 Driver Version: 384.90 |
    |-------------------------------+----------------------+----------------------+
    | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
    | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
    |===============================+======================+======================|
    | 0 GeForce GTX 1070 Off | 00000000:01:00.0 Off | N/A |
    | 41% 69C P2 118W / 151W | 6557MiB / 8114MiB | 99% Default |
    +-------------------------------+----------------------+----------------------+
    +-----------------------------------------------------------------------------+
    | Processes: GPU Memory |
    | GPU PID Type Process name Usage |
    |=============================================================================|
    | 0 28991 C ./resume 6547MiB |
    +-----------------------------------------------------------------------------+
    ϝϞϦ͕8GB͔͠ͳ͍ೈऑͳGPUͰ͸
    ResNet-36ͷ࣍ʹখ͍͞ResNet-50͸
    ϝϞϦʹ৐Βͳ͔ͬͨ(όοναΠζ15ͷ৔߹)
    ΋͏73".ͳ͍
    ͳͥResNet-36ͳͷ͔

    View Slide

  75. CaffeͷSolverͰֶश
    void run(){
    caffe::SolverParameter solver_param;
    caffe::ReadProtoFromTextFileOrDie(FLAGS_solver, &solver_param);
    std::shared_ptr>
    solver(caffe::SolverRegistry::CreateSolver(solver_param));
    if (FLAGS_snapshot.size()) {
    LOG(INFO) << "Resuming from " << FLAGS_snapshot;
    solver->Restore(FLAGS_snapshot.c_str());
    }
    else if (FLAGS_weights.size()) {
    CopyLayers(solver.get(), FLAGS_weights);
    }
    const auto net = solver->net();
    LOG(INFO) << "Solve start.";
    solver->Solve();
    }

    View Slide

  76. return;
    }
    if( FLAGS_output.empty() ) {
    LOG(INFO) << "Required parameter output is not set." <<
    FLAGS_snapshot;
    return;
    }
    const auto net = solver->net();
    float dummy = 0.f;
    constexpr size_t image_size = 400*400;
    std::vector< float > image( image_size, 0.f );
    softfm::get_spectrum_image_flat( std::vector< std::pair< int,
    std::string > >{ { FLAGS_note, FLAGS_input } }, image.data(),
    FLAGS_threshold );
    const auto input_layer = boost::dynamic_pointer_cast<
    caffe::MemoryDataLayer< float > >( net->layer_by_name("data") );
    input_layer->Reset( image.data(), &dummy, 1 );
    const auto result = net->Forward();
    const auto data = result[ 1 ]->cpu_data();
    const std::vector< float > values( data, std::next( data, result[ 1
    ]->count() ) );
    namespace karma = boost::spirit::karma;
    std::string serialized;
    std::ofstream out( FLAGS_output, std::ios::out|std::ios::binary );
    std::ostreambuf_iterator< char > obuf( out.rdbuf() );
    karma::generate( obuf, karma::float_ % ',' , values );
    }
    ຊ෺ͷָثͷԻΛ
    ֶशͨ͠ωοτϫʔΫʹ௨ͯ͠ධՁ

    View Slide

  77. ޡૢ࡞ʹΑΓ
    ͜ͷظؒͷΤϥʔϩά͸ࣦΘΕͨ
    200epoc͋ͨΓ·Ͱ͸ٸܹʹޡ͕ࠩݮ͕ͬͨ
    ͔ͦ͜Β͸ඇৗʹΏͬ͘Γݮগ͍ͯͬͨ͠

    View Slide

  78. 102MBͷFMԻݯ৬ਓͷΧϯ͕஀ੜͨ͠
    $ ls 8op_iter_300000.caffemodel -lhaS
    -rw-r--r-- 1 root root 102M 11݄ 16 17:42
    8op_iter_300000.caffemodel

    View Slide

  79. ࣮ࡍͷϐΞϊͷԻ χϡʔϥϧFMԻݯ Ҩ఻తFMԻݯ
    ໐Γ࢝Ίʹग़͍ͯΔप೾਺͸େମ߹͍ͬͯΔ͕
    ഒԻ͕શ͘ݮਰ͍ͯ͠ͳ͍
    ݁Ռ
    ϐΞϊ

    View Slide

  80. ࣮ࡍͷϐΞϊͷԻ χϡʔϥϧFMԻݯ Ҩ఻తFMԻݯ
    Ҩ఻తFMԻݯʹΑΔϐΞϊ
    গͳ͘ͱ΋͜ͷ͘Β͍͸ग़ͤΔ͜ͱ͸Θ͔͍ͬͯΔ
    ϐΞϊ
    ݁Ռ

    View Slide

  81. ࣮ࡍͷϐΞϊͷԻ χϡʔϥϧFMԻݯ Ҩ఻తFMԻݯ
    ϐΞϊͬΆ͘ฉ͑͜Δ෦෼΋͋Δ͕
    Ҩ఻తFMԻݯͱൺ΂Δͱ͠ΐͬͺ͍
    ϐΞϊ
    ݁Ռ

    View Slide

  82. ࣮ࡍͷϏΦϥͷԻ χϡʔϥϧFMԻݯ
    ϏΦϥ
    ݁Ռ

    View Slide

  83. ࣮ࡍͷαοΫεͷԻ χϡʔϥϧFMԻݯ
    ΞϧταοΫε
    ݁Ռ

    View Slide

  84. ֶशࡁΈͷϞσϧ͕͋Δঢ়ଶ͔ΒͳΒ
    Ҩ఻తΞϧΰϦζϜͱൺֱͯ͠ѹ౗తʹ୹࣌ؒ
    ܭࢉʹཁͨ࣌ؒ͠
    04 ([email protected] MJOVY
    ([email protected] MJOVY

    ίϯύΠϥ OWDD HDD
    ''5ʹ࢖༻ͨ͠ $V''5 ''58 ୯ਫ਼౓ɺ0QFO.1ରԠɺ"79ରԠ

    %//ϑϨʔϜϫʔΫ $B⒎F
    $16 *OUFM$PSFJ 4LZMBLF
    ()[ίΞ
    (16 OWJEJB(F'PSDF(59()[$6%"ίΞ
    ϝϞϦ IPTU(#EFWJDF(#
    σʔλͷ௕͞ ඵ L)[

    ऴྃ৚݅ ੈ୅໨ΛٻΊͨΒऴྃ ॱํ޲ͷܭࢉΛճߦͬͯऴྃ
    ܭࢉʹཁͨ࣌ؒ͠ ࣌ؒ෼ඵ ඵ
    ݁Ռ

    View Slide

  85. χϡʔϥϧωοτϫʔΫͰૉૣ͘ٻΊͨ
    େࡶ೺ͳղΛॳظ஋ͱͯ͠
    Ҩ఻తΞϧΰϦζϜͰਖ਼֬ͳղʹ͚ۙͮΕ͹
    ୹͔࣌ؒͭߴ඼࣭ͳύϥϝʔλ͕ಘΒΕΔ͔΋
    ߟ࡯

    View Slide

  86. ৞ΈࠐΈχϡʔϥϧωοτϫʔΫΛ࢖ͬͯ
    ༩͑ΒΕͨԻ৭ʹ͍ۙԻ͕ग़Δ
    FMԻݯͷύϥϝʔλΛٻΊͨ
    Ҩ఻తΞϧΰϦζϜΛ࢖ͬͨ৔߹ͱൺֱͯ͠
    ඼࣭Ͱ͸ྼΔ͕ܭࢉ࣌ؒͰ͸༗ར
    ྆ऀΛ૊Έ߹ΘͤΔͱྑ͍͔΋͠Εͳ͍
    ·ͱΊ
    े෼ͳ࣮ݧΛߦΘͣʹબΜͩ
    ϋΠύʔύϥϝʔλ͕ଟ͍ͨΊ
    ΋ͬͱ඼࣭Λ্͛Δํ๏͕ӅΕ͍ͯΔ͔΋

    View Slide