スキルアップ株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。本格的AI開発」を開催。書籍『はじめてのディープラーニング』の著者である我妻幸長さんが、ごくシンプルなディープラーニングモデルを使って、ディープラーニングの基礎からわかりやすく解説してくださいました。幸長さん「ヒトとAIの共生」がミッションの会社、SAI-Lab株式会社の代表取締役。世界一受けたいiPhoneアプリ開発の授業」(技術評論社)。オンライン教育プラットフォームUdemyで、2万人以上を指導する人気講師。エンジニアとして、VR、ゲーム、SNSなどジャンルを問わず様々なアプリを開発し、数々の技術関連イベントに登壇。人工知能、ディープラーニングとは最初にディープラーニングについての紹介がありました。その中でも面白かったのが「AIには強いAIと弱いAIがある」というお話。強いAIは、生物の知能に迫るAIで、ドラえもんや鉄腕アトム、スターウォーズに登場するC3POのような汎用的なものですが、これはまだ実現していません。いっぽうの弱いAIとは、限定的な問題解決や推論に使われるもので、こちらは画像処理や機械制御、音声による会話、文章の認識や作成など、各分野での利用が始まっています。AIのカテゴリの中には、機械学習のような脳の神経細胞を模倣するものだけでなく、神経細胞でなく遺伝子を模倣するものや、生物の群れを模倣するものなどもあるそうです。今回は機械学習がテーマなので、まずは機械学習の基礎から説明してくださいました。ニューラルネットワークは、脳の神経細胞(ニューロン)を模したモデルで、ニューロンが、層を形成していて、同一階層ではつながっていないが、前と後の層とはすべてつながっているという特徴があり、「多層」で構成されるニューラルネットワークで行う学習をディープラーニングと呼ぶそうです。▲ヒトの脳には1000億の神経細胞と100兆個のシナプスがあるそうそして、ニューラルネットワークでは、入力に対して重み付けやバイアスをかけ出力をしますが、その結果に対して、ニューロンの結びつきの重要度を変えていく、バックプロパゲーションという考え方もポイントです。人工知能の根本を理解するには数学が欠かせません。人工知能を知るのに必要な数学とは何でしょうか。我妻さんによれば、次のものだそうです。ディープラーニングは、Pythonと相性がいいと言われていますが、それはNumPyとmatplotlibいうライブラリが用意されており、上記の数学分野の演算が高速で処理できる関数群や、結果を手軽に可視化できるからだそうです。「数学が何の役に立つのかわからなかった人も多いかもしれませんが、コードにすると手軽に試行錯誤が可能になります」とのことで、さっそく行列積をコード化してみることに。▲PythonにライブラリNumPyを読み込んでいればこの行列積の計算も簡単に記述できる123456という行列と、111111という行列の積ならば次のようになります。b)print(c)行列の行と列の要素を入れ替える処理を転置と呼びます。▲行列の要素数が増えると転置の処理も時間がかかるが......NumPyを読み込んでおけば、次のように記述できます。a,Tprint(d)ディープラーニングの実演いよいよ実際にニューラルネットワークによる機械学習を実装します。いえ多層になると難しいので、ここでは単一ニューロンのモデルを使用しました。▲単一のニューロンでも基本原理は変わらない。順伝播と逆伝播があり、逆伝播によりシナプスの結合が強化される▲各ニューロンで入力に対して重み付けやバイアスをかけ、その結果を活性化関数で処理して出力を得る内容はsin関数のx座標とy座標の値から、ニューロンにゼロから学習させていき、x座標の値からsin関数の結果導かれるy座標を予測させるというシンプルなものでした。我妻さんがそれぞれの機能や役割を紹介しながら、実際にコード化していきます。3層で入力と出力が1つのニューロン、中間層のみ3つのニューロンというモデルです。単純化すると入力値xに対して重みwを掛け、バイアスbを加える。これを活性化関数fに入力して出力値yを得ます。f(u)活性化関数には、ニューラルネットワークに欠かせないもので、さまざまな関数が用いられますが、ここでは、古くから使われているシグモイド関数を使用します。exp(-u))実際には上記をベースに行列の演算を行っていきます。単一ニューロンによるニューラルネットワークであれば、主要な部分は3~4行で書けてしまうということに驚かされました。言えばPythonを使うというイメージがありますが、他のプログラミング言語でも実装は可能です。実際に我妻さんが、Swiftでの実装を示してくれました。内容は「強化学習」です。試行錯誤を通じて、ある環境においてエージェントが最も報酬が得られやすい行動をとるように学習していくもので、有名なものだとチェスやオセロの強化に利用されています。行動は、エージェントが環境に働きかけること(たとえば迷路内を移動する)。状態はエージェントが環境におかれた状態(進める方向)。報酬は結果に与えられるもの(ゴールに到達すれば+1、罠にはまると-1のような)です。これを実装する前に、この問題を解くための代表的なアルゴリズムであるQ学習について知っておきます。▲各状態と行動の組み合わせにQ値を設定し、エージェントは最もQ値の高い行動を選択するようにし、Q-Tableの各値が最適化されることで学習を行うQ値は、次の式に基づいて更新されます。Q値の更新量=学習係数×(報酬+割引率×次の状態での最大のQ値-現在のQ値)ただし、扱う状態の数が多いとQ-Tableが巨大になり学習がうまく進まなくなるという問題点があるため、Q-Tableの代わりにニューラルネットワークを使うのだそうです。Q-Network(DQN)と呼びます。Pole問題という簡単なゲーム。これは、よく学校の掃除の時間に一度はしたであろう、箒を手のひらの上に立てて、バランスを取り、箒が倒れないようにするというあの遊びです。カートの上に乗せた棒を倒れないように左右に動かすというもので、棒が45度以上傾いたら報酬-1、200フレーム保てたら報酬+1としてSwiftで実装し、iPhoneで動作するものでした。何回かデモをしてくださり、それを見ているだけでも面白かったのですが、我妻さんによれば、これまで何度も動かしてきた中で、さまざまな戦略が試みられていることが分かったということです。「ぶるぶる移動作戦」は、小刻みに左右への動きを繰り返し、バランスを取るという手法、「カウンターアタック作成」は、まず大きくどちらか片方に動かし、すぐに逆に大きく動かすことでバランスを取ろうとする手法だそうで、他にもいくつも特徴的な学習の試みがなされているそうです。今回のイベントでは、難しい数式も出てきましたが、機械学習の中身に踏み込んだものであり、考え方をコードに落とし込むというプログラミングの根源的な面白さもありました。数学とあわせて、よりディープラーニングへの理解を深めていきましょう。登録しましょう!『ITスタッフィング』はリクルートスタッフィングが運営する派遣エンジニアのお仕事探しに特化したサイトです。オンライン登録と来社登録、2つの方法が選べます。Maker」として働き方そのものを生み出せる企業になることを目指しています。Ltd.お問い合わせプライバシーポリシーご利用にあたって引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。