最後まで聞いてもらうためのプレゼン技術

私がスライドを作るときや発表をする時に意識している事を具体的な作成例と共にまとめました。この記事を書いたのは「これ違う」とか「こうした方が良い」とか「お前それ実践できてなくね?」とか他の人の意見が聞きたかったためなので、思うところがあったらなんでもコメントください。

なお、この記事を書こうと思ったきっかけは最近いろいろと発表してて手応えが無い事が多いなと思う事が増えて一旦自分の発表に関してまとめたく思ったためです。

0. 目次

  • 1 スライドを作る時
    • 1.1 聴衆を迷子にさせない
    • 1.2 文字を少なくする
    • 1.3 図を入れる
    • 1.4 強調したい単語は太字や赤字にする
    • 1.5 スライドは絶対戻らない(言いたいことは繰り返す)
    • 1.6 体験に基づく事例やたとえ話を入れる
    • 1.7 1枚のスライドで話しすぎない
    • 1.8 デザインの基本的な原則は守る
    • 1.9 時間は絶対オーバーしない
  • 2 発表するとき
    • 2.1 ゆっくり話す
    • 2.2 「えー」「あー」「まあ」を言わない
    • 2.3 声を張る
    • 2.4 聴衆を見る
    • 2.5 喋るときは手などを動かす
    • 2.6 自己紹介は名前とアカウント名と一言

1. スライドを作るとき

まず、発表前段階のスライド作成に関してです。

1.1 聴衆を迷子にさせない

一番大事なのがこれです。長めの発表だと特にこれを意識して資料を作ります。発表を聞いているときにふとメモを取ったりTwitterハッシュタグを追っかけたりして、一度発表から注意を逸らしてから再びスライドを見たときに何の話をしているかよく分からなくなるとその場で発表を聞かなくなってしまう事があります。

これはスライドに章と節番号を振って載せる事でだいぶ改善されると思います。

1.2 文字を少なくする

伝えたい事を1スライド一言で伝え、小さく下に補足として文字を入れます。

f:id:asmsuechan:20191227224945p:plain

1.3 図を入れる

どんなに適当なものでもいいので図を入れましょう。これだけで一気にスライドを見る気がおきます。本の挿絵なんかと同じですね。(以下の図、あんまり分かりやすくはないですが)

f:id:asmsuechan:20200105232838p:plain

1.4 強調したい単語は太字や赤字にする

強調したい部分とそうでない部分に差をつけてメリハリを付けると分かりやすくなります。さらに、言いたい事を強調しておくと発表の時にその部分を強調して言うぞ、というメモにもなります。

f:id:asmsuechan:20200105222240p:plain

1.5 スライドは絶対戻らない(言いたいことは繰り返す)

スライドを戻ると「え?今どこいった」ってなって混乱する事がよくあります。スライドを戻って説明する予定なら同じスライドを挟むか、スライドのスクショを挿入しましょう。そして前と同じことが言いたければもう一度言いましょう。

f:id:asmsuechan:20191227231056p:plain

1.6 体験に基づく事例やたとえ話を入れる

具体的な事例があると聞いている人たちは自分の身に置き換えて考えてくれるので分かりやすくなります。

f:id:asmsuechan:20191227225803p:plain

1.7 1枚のスライドで話しすぎない

スライドに動きがないと眠くなってしまいます。1枚のスライドで話すのは最大3分程度がいいと思います。それを超えるのであればスライドを複数枚に分割しましょう。

f:id:asmsuechan:20191227233742p:plain

1.8 デザインの基本的な原則は守る

ノンデザイナーズデザインブックってあるじゃないですか。あれに書いてある原則はしっかり守るというのが基本だと思っています。例えば以下のような事を私は意識しています。

  • レイアウトを規則的にする(反復)
  • コンポーネント配置の縁を揃える(整列)
  • 人の視線がZを描くように進む事を意識する(近接?)
  • 色は3つまでで6:3:1くらいの割合にする(コントラスト)

1.9 時間は絶対オーバーしない

発表で絶対してはいけないのが時間をオーバーする事です。

そもそも運営からすると時間オーバーは迷惑になることが多いです。

目安として私は10分以内なら発表枠の15秒前に終わるくらいに調整、30分以上なら2分くらい、60分以上なら5分くらい、また、前の発表者の時間が押しそうな事が分かっている会ならもっと短くしてもいい、という感覚で資料を作っています。

また、時間をオーバーしないために発表練習をする事が非常に大事になってきます。練習回数は自分のモチベーションや(想定される)聴衆のモチベーションによって変わりますがどんな発表でも15分程度の短い発表なら2-3回、30分以上だと1-2回は最低練習します。

2. 発表する時

次に、実際に発表する時に関してです。一番のコツは「堂々と発表する」事にあります。以下のことを気をつけたら堂々とした発表になるのではと思います。

2.1 ゆっくり話す

緊張していると早口になるのはよくある事です。よって発表中は自分としては多少ゆっくり喋っているつもりでも、後から聞くと実際は早口になっている事はよくあります。ですので発表する際はめちゃくちゃゆっくり話す事を心がけましょう。

2.2 「えー」「あー」「まあ」を言わない

正直緊張するとどうしても出てしまうところもあって多少はしょうがないのですが、なるべく言わないようにしていきましょう。私はこれらの遊び言葉を言いそうになる時には抑えて一瞬無言になる方を選んでいます。

2.3 声を張る

声を張ってハッキリと話すと聞いてくれる人は増えます。私はマイク無しでも声が会場に通るくらいの声量で話す事を意識しているのですが、このせいでよく最初マイクを使うのを忘れてしまいます。

2.4 聴衆を見る

話すときはちょくちょく聴衆に視線を送ります。ずっと画面見ながら発表するとやる気無いように思われてしまって聴衆の心も離れます。

2.5 喋るときは手などを動かす

これはプレゼンのコツなどでよく言われているのですが、発表中に棒立ちで口だけ動かすよりも身振り手振りを含んで表現した方が聴衆は聞こうと思ってくれます。

2.6 自己紹介は名前とアカウント名と一言

自己紹介スライドなどをスライドの最初の方に入れる事はよくあります。しかしスライドは多少作り込んでいても実際に発表する時は端的に短くがいいです。

3. 良いと思ったスライド、発表

まず、schooでの授業資料です。以前(4年前くらい?)見てとても印象に残っていたが全然見つからなくてめちゃくちゃ探して見つけました。最後の方にある「(導入前に相談できる)人います」ってスライドが本当にいいです。画像にインパクトがあって面白いし伝えたいポイントを繰り返しているのが本当に凄いと思いました。

www.slideshare.net

また、私は東大の越塚先生のプレゼンに少し影響を受けています。1ページあたりの情報量が多くなくキーポイントがまとまっていて話も面白く、最初に先生の話を聞いた時、これこそ伝わるスライド・伝わるプレゼンだと思いました。

www.youtube.com

4. 自分の発表

上のような事を意識して作った私の実際のスライドを載せておきます。

まず、先日のdevelopers boostで発表した資料です。発表時間は20分程度で、授業や学会と比べて結構ふざけたノリでやっても良さそうだったので少しゆるめに作りました。

次に大学院の授業の輪講で使った資料です。論文の輪講はアカデミック寄りなのでどうしても文章が多くなってしまっています。発表時間は60分程度で、聴衆は先生と大学院生です。

5. 参考リンク

発表のべからず集です。ひたすら同意です。 blogs.itmedia.co.jp

これもべからず集です。

今回の具体例作成には 走れメロス/太宰治 を参考にしました。 www.aozora.gr.jp

あの日見たwhywaitaの名前を僕達はまだ知らない

よおwhywaita!久しぶりだな!

なぜかずっと同級生だと思っていたが普通に先輩だった事を最近知りました!whywaitaさんお久しぶりです。最近寒くなってきましたがいかがお過ごしでしょうか。

なおこの記事は whywaita Advent Calendar 2019 - Adventar の10日目の記事です。

whywaitaさんとの出会い

実は私達は2016年10月23日の夕方に一度だけ顔を合わせて話したことがあります。覚えていますか。そう。dentoolt#15です。

俺「この後飲み会とかあるんですか!」
whywaita「運営だけで行くので行きたい人はそっちで勝手に行ってください」

泣きながら一人で帰りました。

絡み

私が去年研究室のHPを作った時にブログに言及をいただきました。今日はこの件が1年経ってどうなったか話そうと思います。

研究室のHPの保守どうすんの問題

そもそもこのHPは運用の手間をなるべく少なく出来るように作ったいわゆるサーバレスな構成になっています。ですので一度動き出せばメンテナンスフリーでずっと動き続けてくれるという目算です。実際に1年経過したけど全然メンテコストかかっていません。デプロイフローもちゃんと作っていて、masterブランチにpushされると勝手にデプロイされます。

が、仕様変更的な要望があるとコードをいじってメンテナンスを行う必要がどうしても生じるのでこの点については最近指導教員と相談しました。

指導教員「たまに焼き肉奢ってあげるから卒業後もメンテナンスしてよ」
俺「ごちです!!!!!」

以上。

なおこのHPの価値は2000万円です。

f:id:asmsuechan:20191209154655p:plain

明日はyu_ki_kun_1さんの「斜めにしたかっただけでネタがない」です。

socket.ioでAuth0を使う時verificationでエラー

https://github.com/auth0-community/auth0-socketio-jwt を使うとできそうですが、verify周りで少し詰まったのでメモです。

何も考えずに実装して以下のようなエラーが出た時の対処です。

connection_manager > node emit-example.js
unauthorized: {"message":"invalid algorithm","code":"invalid_token","type":"UnauthorizedError"}
/home/asmsuechan/src/asmsuechan/connection_manager/emit-example.js:33
      throw new Error(msg.data.type);
      ^

Error: UnauthorizedError
    at Socket.<anonymous> (/home/asmsuechan/src/asmsuechan/connection_manager/emit-example.js:33:13)
    at Socket.Emitter.emit (/home/asmsuechan/src/asmsuechan/connection_manager/node_modules/component-emitter/index.js:133:20)
    at Socket.onevent (/home/asmsuechan/src/asmsuechan/connection_manager/node_modules/socket.io-client/lib/socket.js:278:10)
    at Socket.onpacket (/home/asmsuechan/src/asmsuechan/connection_manager/node_modules/socket.io-client/lib/socket.js:236:12)
    at Manager.<anonymous> (/home/asmsuechan/src/asmsuechan/connection_manager/node_modules/component-bind/index.js:21:15)
    at Manager.Emitter.emit (/home/asmsuechan/src/asmsuechan/connection_manager/node_modules/component-emitter/index.js:133:20)
    at Manager.ondecoded (/home/asmsuechan/src/asmsuechan/connection_manager/node_modules/socket.io-client/lib/manager.js:345:8)
    at Decoder.<anonymous> (/home/asmsuechan/src/asmsuechan/connection_manager/node_modules/component-bind/index.js:21:15)
    at Decoder.Emitter.emit (/home/asmsuechan/src/asmsuechan/connection_manager/node_modules/component-emitter/index.js:133:20)
    at Decoder.add (/home/asmsuechan/src/asmsuechan/connection_manager/node_modules/socket.io-parser/index.js:251:12)

JWTのverifyでコケています。ライブラリの中を見たらjsonwebtokenをそのまま使っていた部分がコケていたので詳しくは https://github.com/auth0/node-jsonwebtoken#jwtverifytoken-secretorpublickey-options-callback を参照。

  • どのアルゴリズムを使っているか調べる(たぶんRSA256)
  • algorithmsオプションをauthorize()メソッドに追加する
  • https://[your_domain].auth0.com/pem からpublic keyをダウンロードする

コードはこんな感じです。

const cert = fs.readFileSync('dev-mypubkey.pem');
io.of("/my_prj").on('connection', socketioJwt.authorize({
  secret: cert,
  timeout: 15000, // 15 seconds to send the authentication message
  algorithms: ['RS256']
})).on('authenticated', (socket) => {
  console.log('authenticated!')
})

なおbase64エンコードしたpemファイルでもOKです。Buffer.from(secret, 'base64')すれば使えます。実際に使う時はこちらが良いでしょう。

"Fuxi: a fault-tolerant resource management and job scheduling system at internet scale" を読んだ

授業の輪講でアリババクラウドが作ったFuxiという分散処理システム用スケジューラー/リソースマネージャについての論文を読んで発表しました。専門分野ではないし、分散処理システムを触ったことすら無いので間違いはあると思います。

Zhang, Zhuo, et al. "Fuxi: a fault-tolerant resource management and job scheduling system at internet scale." Proceedings of the VLDB Endowment 7.13 (2014): 1393-1404.

どんなシステムなのか

とても簡単に説明すると、

  • 速い
  • 落ちても死なない

バッチジョブ処理システムを安全に素早く実行するためのシステムです。

そしてこの"速い"を実現するのがIncremental Schedulingです。マスターノードは、アプリケーションからのリソース要求があった際に不足分をマスターノード中の待ち行列に入れて後から割り当てるようにしています。

"落ちても死なない"はマスターノードのホットスタンバイによって実現されています。マスターノードを常時2つ立ち上げておいて稼働系が以上を起こした場合に待機系に切り替えます。この時管理する全てのジョブの状態の復元も行われます。

また、Gray Sortという世界的なソートのコンペで優勝しています。Gray Sortは100TBのデータをソートする時間を競います。

f:id:asmsuechan:20191102095514p:plain

Sort Benchmark Home Page

(これ、純粋にマシンの台数で勝ってるのでは?という気持ちになった)

どうやらシステムはYARNをベースに考えているみたいです(FuxiとYARNは似たアプローチを取っている、と書かれていた)。

アリババクラウドでも使用することが出来て、MaxComputeというサービスの基盤部分で使用されています。

読んだ感想

発表中の先生のフィードバック込み。

  • 待ち行列に全部ぶっこむって書いてあるけどこれは本当にスケジューリングなのか・・・あれこれ考えないから速いっちゃ速いだろうけど
  • 評価が雑。5000台のマシンに1000個のジョブを投入するって、ジョブはマシン台数に比べて少なくない?
  • このシステムの評価には待ち行列の状態の遷移がなくてはならないのでは?
  • 引き継ぐ予定のないシステムの仕様書の概要を見せられてる気持ちになった
  • 「俺らの作った最強のシステムを見てくれ」な論文であった。とはいえ実際に動いているのはすごい。
  • MaxCompute触りたい
  • 分散処理システムに興味を持った。ビッグデータで遊びたい。

結構ゆるふわな論文になっちゃってるのは、実際に企業を支えている基盤のシステムでさらにアリババクラウドでサービスとして提供されているので多くは書けなかった、ということが原因だと思います。

割と辛辣に書きましたけど自分はそんなに大層な論文を書けるわけではないのでVLDB通してて凄いと思っています。

理解の参考にしたサイト

2週間深圳大学にいた

2019年3月、大学のプログラムで「飛行機代往復7万円出せば他は全部大学負担で2週間深圳で過ごせる」というものがあったので応募して行ってきました。

f:id:asmsuechan:20190804010920j:plain

どんな会なのか

深圳大学と仲が良い日本の大学3校から学生を派遣して「深圳はすごい!」をガイドしてくれるツアーです。残念ながら一般応募は無理だと思います。

深圳大学で何をしたのか

午前中は授業、午後はツアーがあればみんなでバスに乗っていろいろ連れて行ってもらって、何もなければ自由にウロウロする。某大中国語学科の学生は応用授業、他は初心者用授業を受けた。

私は初心者用授業だったが、授業内容は日本語ペラペラの先生による発音の特訓だった。授業は10日しかないから変に難しいことするよりも発音特訓でちょうどよかったと思う。

現地の日本語学科の学生さんたちとの交流もありとても楽しかった。

これは学食の謎ラーメンwith謎ドリンク。残した。 f:id:asmsuechan:20190804001811j:plain

最後には適当に作ったグループで8分程度「深圳について人に紹介する」というお題のプレゼン中国語でやった。

お別れパーティーみたいなやつが大学内のカフェであって、なぜか世界に一つだけの花を一人で歌う羽目になった。God Knows歌ってた中国人の女の子めちゃくちゃ上手くて最高だった。

ざっくり感想

学部4年での参加だったんですが、同じ大学のメンバーの中では最年長だった。というか他みんな1,2年生の若者だった。普段接することがない人たちと仲良くなれてよかった。

ちょくちょく「深圳はテクノロジー最先端の街でSFの世界の未来都市になっている」みたいな話を見るんですが実際にはただ生活するだけじゃそんなことはなくて、それっぽい会社に入って中から見ないと未来都市感は味わえなさそう。起業は結構しやすそうな制度が整備されてはいるみたい。

(ってかそもそもあんだけ外が暑いと未来都市感は全然ない。僕たちが思い描く未来都市はもっと快適に生活できる場所。)

中国の人たち、他人と関わる事にためらいがない人が多いという印象で、だからこそ知らない人に「終電終わってるよ」とか突然親切なアドバイスしてくれたり「Appleスマホ安くするけど買わない?」とか突然パチモン売りつけたりしてくれるんだな、と思った。

キャンパス内の写真

キャンパスはとても広くて自然いっぱいで湖があったりなんかよく分からない露天があったりと活気があった。

f:id:asmsuechan:20190804003941j:plain f:id:asmsuechan:20190804005037j:plain

キャンパス内は自然いっぱいで動物もたくさんいて、鳥とか猫とかがよく落ちてた。 f:id:asmsuechan:20190804003713j:plain f:id:asmsuechan:20190804003750j:plain f:id:asmsuechan:20190804005008j:plain

华强北

世界最大の電気街である华强北にも行った。 f:id:asmsuechan:20190804005356j:plain

10年前の秋葉原をバカデカくしたって感じ。 f:id:asmsuechan:20190804005457j:plain

香港

予定が入っていない日が1日あって、その日に男3人で香港に行った。深圳からは電車で1時間ほど行けば着く。近い。

f:id:asmsuechan:20190804004700j:plain

香港は英語が通じたので良かった。

食べ物

フルーツが安くてめちゃくちゃおいしかった。フルーツ好きなのでかなりよかった。 f:id:asmsuechan:20190804004022j:plain

中国で食べた料理はだいたい油多くて辛かったので5日くらいでしんどくなった。これは学食でほぼ毎日食ってたメニューだけど、見た感じからして油多くて辛そう。おいしかったけどこれ毎日はちょっとハードルが高い。みんなお腹壊してた。 f:id:asmsuechan:20190804004143j:plain

初日のご飯。ちょっといいホテルのちょっといいご飯でめちゃくちゃおいしかった。 f:id:asmsuechan:20190804004317j:plain

交通

めっちゃ安い交通機関30分以上タクシー乗っても1000円いかなかった。すごい。

地下鉄はこの緑のコインを買って乗る。安い。

f:id:asmsuechan:20190804004839j:plain

便利情報

これから中国に行くにあたっての便利情報を書いていきます。

  • 銀聯カードは必須
  • 外国人はキャッシュレスを使えない
  • 現金は必須
  • SIMは香港SIMで
  • 英語は通じない
  • 日本から行くときは香港経由が安い

お金

お金の話です。VISA/MasterCard/Amexなどはスタバなどの外資系以外ほとんど使えません。銀聯カードを事前に作って持っていきましょう。あと、更に現金は週当たり2万円くらいを持っていけば余裕で足りるはずです。AlipayやWechatPayは外国人に厳しいのでほぼほぼ使えないと見込んでいいです。一応送金してもらったら使えはするみたいですが。

SIM

中国いる間もTwitterしたいですよね?香港ローミングのSIMだとグレートファイアウォールの影響を受けないのでストレスなくインターネットが楽しめます。私は以下を買いました。

英語

英語は通じないことが多いので中国語を話さなければならない場面は結構有りました。翻訳アプリでなんとかなることも多いですが初級中国語は覚えていったほうが良いかもしれません。

日本から行くときは香港経由が安い

飛行機で直接深圳に行くより、香港行きの飛行機に乗ってそっから電車で深圳に行くほうが結構安く上がることが多いようです。

まとめ

しっかりとこういうサーティフィケーションも貰って大満足でした。

深圳、また行きたい。

「実装ディープラーニング」を読んだ

f:id:asmsuechan:20190512142711p:plain

本の情報

項目 情報
ページ数 265P(巻末の付録を抜くと209P)
章数 全6章
著者 藤田一弥さん

全体的な感想

シンプルに分かりやすくまとまっているとてもいい本です。ディープラーニング一冊目に最適だと思います。コードに関してはあまり込み入った解説はないのでザッと1周写経して流れを掴むのがよさげです。

こんな人が読むと良さそう

手を動かしてディープラーニングを使ったスクリプトの実装を身に着けたい人におすすめです。ただし書籍内の環境以外では動かないことが結構あるので本当に同じように動かしてみたい時はバージョンをしっかり揃えたほうが良さそうです。

この本のスクリプトを動かすにはGPU動かせるマシンが必要になります。私はGPUマシンを持っていないのでAWSGPUインスタンス(g3.sxlarge)を使いました。

この本を買った理由

研究の引き継ぎをしていて、先輩が「これ読んで強化学習学んだ」と言っていたためです。

自分の開発経験

ディープラーニングに関しては完全に初めてですが、機械学習は少し分かるといった程度です。 ニューラルネットワークに関する知識も多少あります。

1章

この本全体の流れの紹介とUbuntuのインストールを含めた環境構築手順が紹介されています。

この本では強化学習を使った画像認識を行っていきます。具体的にはCaltech 101データセットを使って画像の6クラス分類を行います(第4章)。

上にも書いたように私はEC2のGPUインスタンス上に環境を構築したのでOSはUbuntu 16.04で1GPU, 4vCPU, 30.5GB RAM, $1.04/h(ap-northeast-1) って感じのスペックです。

ミドルウェアのインストールにも触れられていたのですが、私はLambda Stackを使って環境構築しました。楽ですね。

LAMBDA_REPO=$(mktemp) && \
wget -O${LAMBDA_REPO} https://lambdalabs.com/static/misc/lambda-stack-repo.deb && \
sudo dpkg -i ${LAMBDA_REPO} && rm -f ${LAMBDA_REPO} && \
sudo apt-get update && sudo apt-get install -y lambda-stack-cuda

CUDA/cuDNNについて簡単に説明します。

(1) CUDA (Compute Unified Devicev Architecture)

NVIDIAが開発しているGPU演算を使えるようにするツールです。ディープラーニングだけではなくてGPUを使う処理一般で必要になります。

(2) cuDNN (CUDA Deep Neural Network library)

NVIDAが開発しているディープラーニング用のライブラリです。諸々の最適化のおかげでcuDNNを使うと早くなるそうです。

2章

この章ではニューラルネットワークの基礎が説明されています。

畳み込みニューラルネットワーク(CNN)

畳み込みニューラルネットワーク入力層、畳み込み層、プーリング層、全結合層、出力層から構成されています。

こちらも参考にしました。

ml4a.github.io

畳み込み層

畳み込み層は入力データに対してスライドしながらフィルターをかけることで、画像のどこに特徴が存在するかを示す特徴マップを抽出します。畳み込み処理を行うと入力データより小さい特徴マップが作成されますが、ここで同じ大きさにしたい場合はパディングを入力データに追加してフィルターを書けます。また、逆により小さい特徴マップが欲しい場合はスライドさせる量(ストライド)を大きくすることで小さい特徴マップが作成されます。

プーリング層

プーリング層は特徴マップのある領域の代表値を抽出するものです。使われる代表値には最大値や平均値などがありますが画像認識では最大値を一般的に使います。

3章 基本用語

ディープラーニングでの学習では、予測された値と教師データとの誤差を損失関数を使ってこの誤差を最小化するようにしていきます。

例えば10000行のデータを100行ずつ100回の学習に分ける時この学習方法をミニバッチ学習といい、一回の学習で学習する量(ここでは100行)をバッチサイズといい、一回の学習をエポックといいます。

分類問題で使う全結合ニューラルネットワークでは最終的な出力を出すのに活性化関数を通します。損失関数には二乗誤差、クロスエントロピー、二値クロスエントロピーなどがあって4章の画像分類ではクロスエントロピーを利用します。クラ分類ではソフトマックス関数を使うことで0-1の範囲で表される確率の形になります。

確率的勾配降下法(SGD)

1層の全結合ニューラルネットワークにおいて誤差の和が最小になるように重みを更新していきます。例題があって分かりやすいです。

4章

4章では実際にPythonディープラーニングを使った画像分類のスクリプトを書いていきます。環境構築から画像へ対する前処理をした後にKerasでニューラルネットを学習させていきます。前処理しながら思ったんですが、画像の分類ってやること多いですね。

9層のネットワークでの学習

9章のネットワークをkerasで構築します。

学習の様子です。 f:id:asmsuechan:20190514180803p:plain

推測の様子です。 f:id:asmsuechan:20190514181940p:plain

16層の学習済みモデルでの学習

2014年のILVSRCで2位になった出力が1000クラスの16層のニューラルネットを使って6クラスの出力を得られるニューラルネット再学習(Fine Tuning)します。9層と違って畳み込み層とプーリング層が増えてるみたいです。

6章 強化学習

強化学習はもともとは心理学の言葉で、ラットなどの実験用動物にある動作を覚えさせたい時(たとえば、ボタンを押したら餌が出てくるなど)に期待した動作をすれば報酬がもらえるという学習です。これを機械学習に応用して報酬と罰により適切な行動を学習するものです。

Q学習

強化学習を実現する手段の1つがQ学習で、Q値と呼ばれる値を使って報酬を得ながら報酬が大きくなる方向に進み、かつその報酬を使って以前使ったQ値を更新していくことでより良い行動を学習するものです。

DQN

複雑な問題に対してQ学習を適用するためにディープラーニングを使うモデルがDQN(Deep Q-Network)です。

DQNの実装の登場人物は (1) Environment, (2) RL_Glue, (3) Experiment, (4) Agent の4人です。Environmentが学習が行われる環境で、Agentがその中で学習を行うプログラムです。そしてExperimentは勝ち負けの判定や学習の開始や終了を判断する審判のような役割です。そして最後にRL_Glueがこれら3つをつなぎ合わせるためのglue(のり)です。

で、6章も動かそうとしたのですがRL-Glueのコードが、死亡したGoogleCodeにホストされてた上にGitHubなどへのマイグレーションがされてなくてダウンロードできなくて断念しました(どっかにはあるんでしょうけど)。

感想

一番読んでいて楽しかったのは6章でした。2, 3, 6章は繰り返し読もうと思います。

「Pragmatic Terraform on AWS」を読んだ

ダウンロード版で読みました。

f:id:asmsuechan:20190510144654p:plain

booth.pm

本の情報

項目 情報
ページ数 144P
章数 全22章
著者 @tmknomさん

全体的な感想

大事なのはTerraformの使い方というよりAWSのリソースを正しく構成して関連する全てのリソースの存在を明確に意識する力だと思いました。難しい。

最後の章に書いてある参考文献もとても素晴らしくて、SREとしてやっていきたいなら必要な知識が書かれている本ばかりですのでぼちぼち拾って読んでいきたいです。

↓読んでいて心に残った言葉

Terraform で試行錯誤するときには、ケチケチせずにそれなりのインスタンスタイプを使用しましょう。時は金なりです。

こんな人におすすめ

サーバーサイドは書けるけどWebインフラはちょっとあんまりって人は読んでとてもためになると思います。

この本を買った理由

Terafformを1から自分で書くという経験をしたことがなく、体系的に学べると思ったためです。あと、著者の@tmknomさんがクラウドワークスインターン時代に一時期メンターさんだったから、っていうのも大きな理由です。

また、最近研究でGPUインスタンス(G3/P2)を立てて学習を回しているのですがパフォーマンス改善の問題でスペックの異なるインスタンスで動かしたり複数人で同じ環境のインスタンスを立てたりする必要があってここの作業をなるべく自動化したかったためという理由があります。

自分の開発経験

Terafformを1から書いたことはありませんが、plan / applyはしたことがあります。AWSに関しては一通り触ったことがあるのですがリソースを作る時は結構コンソールからポチポチすることが多いですし、最近は開発にserverless frameworkを使うことが多いです。

1-3章 TerraformでEC2インスタンス立ててapacheを入れる

ここでterraformの使い方の流れが学べます。私は順序立ててTerraformを使ったことがなかったので全部手を動かしてapache入りのサーバーを作りました。

4-17章

ここからの章は全部手を動かすというより興味が合ったり必要が合ったりしそうな部分を読んで必要がある場合には手を動かすって感じにしました。

17章 構造化

この章は以前の章とは違ってTerraformを使ってAWS上にリソースを作っていくのではなくTerraformのモジュール構造において意識すべきポイントが書かれています。この構造化はTerraformだけに限らず他の設計(コンポーネント設計やクラス設計)に関しても大いに役立つとても有意義な章だと思います。

18章 Terraformベストプラクティス / 19章 AWSベストプラクティス

Webのチュートリアルだけでは学べない、現場で開発するには必須のTipsがまとめられています。

20章 モジュール設計

Terraformのモジュールを作る際に意識すべきことがまとまっています。疎結合、高凝縮、認知的負荷などの項目がまとまっているのでTerraformだけでなくライブラリのAPI設計(npm packageやgemなど)に対しても非常に有用です。

得られた学び

この本を読んで無事に研究の機械学習環境構築が自動化されました。その中で詰まった点は「user_dataのスクリプトはrootユーザーで実行される」ということくらいです。これサクッと書きましたが結構詰まりました。

その他

著者の@tmknomさんがこの本に関する出版周りの記事をいくつか書いているのですが、どれも読むと「すげえ・・・・・」ってなります。全ての技術書に感謝したくなる。

nekopunch.hatenablog.com

nekopunch.hatenablog.com

すげえ・・・・・