ITと哲学と

IT系エンジニアによる技術と哲学のお話。

会社でハッカソンをやってみた きっかけ編

社内でハッカソンの運営メンバーを経験させていただいたので、その際に考えたこととかの知見をまとめてみようと思う。(所属する組織の意見や考え方ではなく、あくまで私個人の考えや得た知見であるので注意)

今後同じようなフリを受けて悪戦苦闘する人の役にたったらいいなと思う。

先にハッカソン全体の結論だけ述べておくと、やって良かった。とてもとても。

自分の中で、一緒に働くメンバーへの信頼感が大きく育った。 具体的には、なんの制約もない世界だと、普段一緒に働いているメンバーはこんなにもぶっ飛んだワクワクするアイディアを出してくるんだ。と思った。 限られた時間の中でモノを作り上げようとするみんなの姿に尊敬を覚えた。

きっかけ

9月下旬の期が変わりそうなタイミングで上司が席に訪れて「ハッカソンとかやってみたい」とおっしゃった。 「泊まりで温泉旅館とかにこもって、バリバリ開発したら楽しいんじゃないか」とのこと。 ここから全てが始まった。

まずは目的を明らかにしよう

ハッカソンとかやってみたい」ということがどんな目的を持っているのかをまずは浮き彫りにする必要がある。

ハッカソンとかやってみたい」と一言で言っても、純粋になんとなくハッカソンってモノを知って面白そうキラキラってなってるのか、それとも感じている問題がありそれを解決するための方法としてハッカソンとおっしゃっているのか。 背景となる問題があるのであれば、それを解決する最良(つまり最速or最善)の方法がハッカソンなのかどうかなど、急にハッカソンと言われて焦る気持ちを落ち着けて、考えていく必要がある。

これを明らかにするためにまず、なる早でかつ関係者全部入れてMTGをセッティングした。 熱いうちに想いをチームで共有するためになる早で。かつ想いは「単なる事実」ではないため、伝言ゲームしていくと事実より大幅にずれる。なので、キックオフは全員参加で直接一次ソースから全員が熱を受け取れるようにしたい。

このMTGの結果、以下の通りの目的を上司が持っていることを明らかにできた。

  • 技術のアップデート
  • 自ら出したアイディアで開発を進めることによる主体性の発揮
  • 共同で生活をすることでお互いを知る(エンジニア系メンバー以外も全員で参加すること※)

※ なお家庭の事情などで宿泊が難しい人もいるのでその人たちは通いでも可とした

逆に今回目指さないものを以下の通り定義できた。

  • 製品化に向けた実用的なアイディア
  • イノベーションを起こして今後の製品開発に活かす

特にこの目指さないものを決めるという点が忘れがちだが大事で、プロジェクトを進める上での意思決定の重要な基盤となっている。 可能であれば目指すものについて優先順位もつけたかったが、MTGの中で「ごめんこれらの優先順位は決めきれない」との宣言があり、優先順位づけは諦めた。

なお、これによりトレードオフ(特に以下の2点)の場面での意思決定の難易度が上がった。

  • 技術のアップデート
  • 互いを知る

技術を磨くことを目的とした場としつつ、エンジニアでないメンバーにとってもプラスになるような場を作るという点が、このプロジェクトの一番の課題となった。

目的を受けてやるべき内容を考える「本当にハッカソンなのか?」

例えば共同生活により互いを知ることが目的なのであれば、ハッカソンではなく一緒に宴会をしたり、社員旅行(部署旅行?)をしたりすれば良い。ハッカソンの準備とかすげえ大変なので、これが最良の選択肢になり得るだろう。

目的によってはハッカソンまで行かなくてもアイディアソンの実施でも良いかもしれない。 みんなでユニバに行こうとかでも解決案になりうる。ユニバはとても楽しい。

今回は技術的なアップデートなど様々な点から検討し、ハッカソンが一番目的を達成できるだろうということでハッカソンに決定した。

今回はここまで。

JDLAのG検定に向けて_3

JDLA(日本ディープラーニング協会)のG検定というのが12/16(土)に実施されるようです.

ディープラーニングを事業に活かすための知識を有しているかを検定する」を目的としているようなので,事業に活かすための知識を得るためにはこれを取得するために勉強するのも良いかと思ったので,ちょっと勉強してみようと思います.

http://masamasa.hatenadiary.jp/entry/2017/11/12/125725の続きです.

この記事はシラバス人工知能分野の問題」について,参考図書「人工知能は人間を超えるか ディープラーニングの先にあるもの」をもとにまとめて見ました.

トイプロブレム

明快なルールがあり,非常に限定された状況下での問題. 現実的に解く必要のある問題に比べて比較的単純であり解きやすい.

フレーム問題

知識の応用時における選別に関する問題. 自分の状況や解きたい問題に関わる知識とそうではない知識を機械は簡単に判別することができない.

そのため,持っている知識全てを思考しないといけないので,レスポンスタイムがかかりすぎたりして実用に耐えないという問題.

弱いAI/強いAI

知能や心の原理を解明して工学的に作り出すのが強いAI. 心をもたず,限定された知能によって一見知的な振る舞いをするのが弱いAI. 中国語の部屋は弱いAIの典型的な例.

身体性

AIに体を持たせることで,記号とモノとを紐付けることを可能にし,シンボルグラウンディング問題を解決できる という考え方.

シンボルグラウンディング問題

記号とモノを紐づけることができるか?という問題. 例えば「シマウマは縞模様の馬である」という知識を持っていたとして,かつシマウマを見たことはないとする.

人間は初めてシマウマを見た際に,その特徴から「これがシマウマか!」と気がつくことができるが,機械はそれができない. 「縞模様」や「馬」という概念について記号とモノが紐づいていないことが要因.

特徴量設計

画像認識などのタスクを実施する際に,Inputとなるデータの何に注目して判定したらいいか?という特徴量を いかに定義するかがこれまでの機械学習の分野では大事な点だった.特徴量を定義することを特徴量設計という.

特徴量の設計は,従来の機械学習の分野において精度にダイレクトに反映される重要な作業であり,研究者の腕の見せ所だった.

DeepLearningではこの特徴量の設計を人間がする必要がなく,機械がデータから特徴量を学びとることができ,特徴量設計を 技術者が行う必要がなくなった.

DeepLearningはこの特徴から,特徴表現学習とも呼ばれる.

チューリングテスト

アランチューリングによって提唱された,AIのテスト. テスターが人とAIとそれぞれ会話し,AIを人と誤認させることができるか?というテスト.

2014年にユージーン・グーツマン君というAIが史上初のチューリングテスト合格者となった. 13才の非ネイティブスピーカという設定が付けられており,テスターのハードルが下がったこともこの結果に影響していると思う.

シンギュラリティ

技術的特異点のこと. AI自身が自分より賢いAIを作り出せるようになる点をさす.

AIが自分より賢いAIを作り出すようになると,そこから発散的に賢いAIがAIによって作成されるようになる. 自身を基準として賢さが0.999のような値であれば1000回かけ合わせると0に近くが,1.001のように1.000を越えると無限大に発散する.

このように,AIが作り出せる賢さが1を越える点が特異点である.

JDLAのG検定に向けて_2

JDLA(日本ディープラーニング協会)のG検定というのが12/16(土)に実施されるようです.

ディープラーニングを事業に活かすための知識を有しているかを検定する」を目的としているようなので,事業に活かすための知識を得るためにはこれを取得するために勉強するのも良いかと思ったので,ちょっと勉強してみようと思います.

http://masamasa.hatenadiary.jp/entry/2017/11/12/125725の続きです.

この記事はシラバス人工知能をめぐる動向」について,参考図書「人工知能は人間を超えるか ディープラーニングの先にあるもの」をもとにまとめて見ました.

探索と推論(第一次AIブーム)

推論

人間の思考過程を記号で表現し,実行する

探索

様々な選択肢のパターンを網羅するように木構造を作り(これを探索木という),どんどん場合分けを進めていくことで 最終的にゴールにたどり着くような方法.

例えば,迷路を解くときに,それぞれの選択肢をとるとどんな状態になるのか?をどんどん木構造で表現していき, ゴールにたどり着くまで続ける. 深さ優先探索とか幅優先探索とか戦略は色々ある.

プランニング

プランニングと呼ばれる,ロボットの行動計画も探索木で作ることができる. 前提条件と行動と結果からなるノードをそれぞれつなぎ合わせることで,最終的に目的達成にたどり着くことができるというもの. 仮想的な世界においては,これは一定の成果を納めるに至った考え方.

だが,探索では迷路や将棋など明確に定義されたルールに基づく問題は解くことができるが,現実的に解きたいような応用問題を解くことが できなかった.現実の問題は複雑すぎたり,ルールが明確でなかったりするので.

これにより期待がしぼみ,第一次AIブームが終わった.

知識表現(第二次AIブーム)

第二次AIブームでは,工場や現実の産業への応用が始まった.

エキスパートシステム

大きな役割を果たしたのは「知識」である. 特定の専門領域の知識を大量に取り込み,推論を行うことで,ある特定の領域におけるエキスパートのように振る舞うことができる ようになったエキスパートシステムというものが作られた. 例えばMYCINというシステムは田先生の血液疾患の患者を診断して適切な抗生物質を処方することを目指す.

この頃のAIには知識を入れるのにコストがかかるという課題や,知識自体の矛盾解決など維持管理が大変だという課題があった.

実際,より汎用的な一般常識を知識として表現しようとするCycプロジェクトというプロジェクトが立ち上がり,実施されているが, 30年経った今でもまだ完遂されていない.

オントロジー研究

さらに,そもそも知識を正しく記述するのが難しいという問題もあり,オントロジー研究という分野が生まれた. その中でもウェブデータの解析などを通して,人間が知識を与えるのではなく機械が勝手に知識を獲得するための方法の研究分野を ライトウェイト・オントロジーと呼ぶ.Wikipediaからライトウェイト・オントロジーで知識を生成し,成功を収めたのがIBMのワトソンである.

知識利用の難しさ

ところで,知識をいっぱい溜め込んだとしても,機械はその意味を理解しているわけではないため,機械が知識を扱うということはかなり難しい問題になる.

フレーム問題

機械は解こうとしている問題に対して知識を活用し解決策を推論するが,解こうとしている問題や背景と関係のある知識なのかない知識なのかを 見分けることができない.

そのため,持っている知識全てについて考え始めるため,知識の量が増えるに従って,機械が考える領域が広がり, 実用に耐えるレスポンスタイムを得ることが難しい.人間は関係のある知識とない知識を無意識に選別できるが,機械はこれができない. これをフレーム問題と呼ぶ.

シンボルグラウンディング問題

知識として得られた概念(記号)と実際のモノを結びつけることが機械はできない.

「シマウマは縞模様の馬である」という知識を得たとしても,それぞれが実際のモノと結びつかないため,例えば人間が 初めてシマウマを見たときに,前述の知識から「シマウマってこれか」と思いつけるが,機械はそれができない.

このような問題をシンボルグラウンディング問題と呼ぶ.

これを解決し,モノと概念を結びつけるためには,「身体」をもつ必要があると主張する科学者がいて, そのような考え方に基づいた研究を「身体性」に基づく研究と呼称する.

機械学習

プログラム自身がデータから学習する仕組みのこと. 大量のデータの中から,例えば分類タスクの場合は「分け方」を見つけ出す. 分け方の見つけかたには色々あるが,なんにせよ,分け方を見つけ出す.

分け方を見つけ出す作業を学習と呼び,これには大量のデータを対象に長い時間をかける必要がある. 一方で,得られた新しいデータを分ける作業は一瞬でできる.

機械学習にも問題があり,それは分けるためにどの情報に着目したら良いか?は人間が決める必要があるという点だった.

注目する情報のことを特徴量と呼ぶ.例えば画像認識であればエッジに注目したり,尖った部分に注目させたりといったような特徴量を人間が設計してあげるしかなかった.

この作業が結局キモになる作業であり,高い技術力と時間をかけて調整する必要があるものだった.

深層学習

2012年の画像認識コンペ「ILSVRC」にてトロント大学が革命を起こした. エラー率で10%以上の大差をつけて,優勝した.

これまでは,いかに特徴量を設計するか?という点で各研究機関がしのぎを削っていたが,トロント大学はこの特徴量を機械が自分で見つけ出すという方法で大きな成果を出した.

これが深層学習であり,上記の通り特徴量を機械が自分で獲得することから,特徴表現学習とも呼ばれる.

特徴表現の問題は第一次AIブームや第二次AIブームで問題になっていたような問題の根本にあった課題であり,これに対する回答が示されたため, 機械学習の分野の大きな飛躍が期待されている.これが現在の第三次AIブームに繋がっている.

JDLAのG検定に向けて_1

JDLA(日本ディープラーニング協会)のG検定というのが12/16(土)に実施されるようです.

ディープラーニングを事業に活かすための知識を有しているかを検定する」を目的としているようなので,事業に活かすための知識を得るためにはこれを取得するために勉強するのも良いかと思ったので,ちょっと勉強してみようと思います.

資格試験っていうとなんかこう色々思うところはありつつも,勉強する過程である程度まとまった知識が得られるという点は利点だと思いますので活用します.

この記事はシラバス人工知能(AI)とは(人工知能の定義)」について,参考図書「人工知能は人間を超えるか ディープラーニングの先にあるもの」をもとにまとめて見ました.

人工知能とは何か

一言でいうと「人間のように考えるコンピュータ」のこと. 1956年のダートマスで開かれたワークショップにて生まれた言葉であり概念.

人工知能は作れるのか?

脳は電気回路のようなものであり,思考はなんらかの計算であると捉えられる. その場合,アルゴリズムで表現できるものはチューリングマシンにて実行することが可能なので,人工知能は作れるはずだ.

知能理解へのアプローチ

構成論的アプローチ

脳を作ることによって知能を理解することを目指すアプローチで,人工知能の研究はこちらのアプローチである.

分析的アプローチ

脳を解剖学的に理解するアプローチである

強いAIと弱いAI

人間の知能の原理を理解し,それを工学的に再現するAIを強いAIといい,限定的な知能によって一見知的な問題解決が行われれば良いと言った スタンスのAIを弱いAIという. 中国語の部屋のようなAIは弱いAIである.

とりあえずこんなもんかな?

Neural Networks and Deep Learning - Neural Networks Basics

CourseraでNeural Networks and Deep Learningを受講し始めました. www.coursera.org

2week目です. 1weekの内容はこちら

内容

この週の講義の前半を一言で表すと,2値分類問題をニューラルネット的な考え方を取り入れたロジスティック回帰で解くといった内容です. コスト関数の定義,(最急)勾配法の説明を行い,勾配法で必要となるコスト関数の各変数での微分を計算するために便利な方法(チェインルール)を紹介するといったような流れです.

講義の後半はPythonの使い方とfor文を使わないでコーディングするためのベクトル化の説明です. for文を使わないでベクトル化したコーディングができると最適化が効いて処理が早く完了するので,そうしましょうというような内容.

コードの見た目的にもfor文を使って手続きがつらつらと書かれているよりも宣言的に書かれている方が見やすくてベターだと感じました.

コスト関数自体の導出はOptionとなっているビデオを見ると結構詳しく開設されていますが,ここら辺の丁寧さは下記の別コースの方が親切かもしれません.

www.coursera.org

まあ本講座はMLの各アルゴリズムの説明を目的としたものではなくDeepLearningに入門するためのものなので,そういう棲み分けになってるんでしょうね

後ぶっちゃけ,この週の動画,かなり多いです...

勾配法

ロジスティック回帰のコスト関数は下に凸な形をしているため,局所解が存在しないものになっている. そのため,ある時点でのコスト関数を求めた後,そのコストが下がる方向に各係数を更新してあげればよりコストが低くなる係数の組み合わせが見つかるという考え方が勾配法です. 「コストが下がる方向」を知るために勾配を求める必要がありこれがコスト関数を各係数で微分することで求まります.

チェインルール

L=f(w), w=g(x+y)というようなx+y=>w=>Lと変換していく1つの処理の流れがあった場合,dL/dx, dL/dyを求める便利な方法があります. 合成関数の微分の際にあるチェインルールがまさにそれで,dL/dx = dL/dw * dw/dx, dL/dy = dL/dw * dw/dy というような形で求めることができます. この時dL/dwは使いまわすことができます.

ロジスティック回帰レベルではそんなに便利さは感じませんでしたが,これがニューラルネットワークでの各係数を更新するための勾配を求めるのに使われるとても便利なルールになっているようです

ベクトル化

各計算を行列の計算に当てはめていくことで,for文を明示的に書かなくて行列の計算という形でコーディングできるようにする手法です. これによって最適化されるので計算が早く完了します.

感想

やはりAndrew先生の説明はわかりやすいです. ただ,全編英語で聞いてるのはしんどいので字幕表示しながら受けているのですが,一部の動画で字幕がずれているケースがあり,ちょっとしんどかったです.

ちなみにプログラミング課題ではロジスティック回帰を用いた猫の分類ロジックを実際に書きます. 拍子抜けするくらい簡単に70%程度の精度で猫判定器が作れるのは嬉しい驚きでした.

Neural Networks and Deep Learning - Introduction to deep learning

CourseraでNeural Networks and Deep Learningを受講し始めました.

www.coursera.org

deeplearning.aiのAndrew Ng先生のオンライン講義です. Andrew Ng先生といえばStanford UniversityのMachine Learningで有名な先生です.

www.coursera.org

僕のMachine Learningの学習はこの講義から始まりました. とてもわかりやすくて,宿題も身につく内容だったので,新たなシリーズが始まったと聞き喜び勇んで1weekの受講を完了しました.

内容

タイトルはIntroduction to deep learning. Introductionということで短いセッションでした.30分に満たないくらい. 内容としてはニューラルネットワークの超導入部という感じでした.

ニューラルネットワークの基礎

住宅価格の推定問題を例として,一つの特徴量をinputとして価格を推定する最小構成のニューラルネットワークの概念をまずは紹介しました.

そこから,複数の特徴量に拡張して浅いニューラルネットワークへと説明を展開していきました. 複数の特徴量(sizeや#bedroom)からfamily sizeという特徴量ができて,それがpriceを推定するニューロンのinputになるというような例でした. 最小限の構成を知った上でどんどん発展させていくように説明してくれるので理解がしやすいです.

教師あり学習

次に,教師あり学習についての説明がありました.

どんな応用をしたいか?どんな問題を解きたいかによって何を説明変数として何を推定するか?を決めることが大切だというお話でした.

例えば不動産価格の推定問題であれば家の特徴を説明変数とし,住宅価格を推定します. オンライン広告問題であれば,広告の特徴やユーザー情報を説明変数とし,Clickされるか否かを推定します. こんな感じでいくつかの例を紹介していました.

また,解きたい問題によって使うべきニューラルネットワーク自体も変わることを説明していました.

例えば不動産価格の推定問題であれば通常のニューラルネットワークを使いますが, 画像認識問題であればCNNsを使いますし,音声認識や会話認識ではRNNsを使うことが一般的だという説明でした. これらはこの講義シリーズの後の方で出てくるので楽しみです.

構造化と非構造化データ

最後に構造化データと非構造化データの説明がありました.

構造化データとはDBに入っているような表データを示し,非構造化データとは音声とか画像とかのデータを示します.

感想

とりあえず1weekが完了しました.

始めの一歩ということでかるーい内容でした. というか1weekはMachine Learningのコースでも聞いたような話が多かった気がします. RNNとかCNNとかは出てきてなかったかもですが.

1weekはプログラミング課題はありませんでしたがQuizがありました. 少し迷いましたが初回で100%正解できたのでよかったです.

最後まで受けられるようにがんばろうと思います.

ちなみにOptionですがあのHinton先生の40分に及ぶインタビュー動画も観れます. 何処かのタイミングで見なくては.

SPRINT最速仕事術を読んで(火曜日編)

前回は月曜日のタスクについてまとめた。 今回は火曜日のタスクについてまとめてみる。

SPRINT 最速仕事術――あらゆる仕事がうまくいく最も合理的な方法

火曜日:思考を発散させる

月曜日にはチームで取り組む課題を決めて、ターゲットを決めた。 火曜日はソリューションを考える。

材料を取り揃える

アイディアの素を集める

スプリントでは0から1を作るような方法はとらず、すでにあるアイディアを組み合わせて課題を解決することを目指す。 本書の中ではレゴの部品を集めるようなイメージと書かれている通りで、レゴの部品を自分で生み出したりはしない。

この作業はネットを使うなりなんなり方法を駆使して参考になりそうな他のモノを洗い出す。 他社製品でもいいし、他の業界の同様の問題を解決しようとしているものでもいいし、社内で過去に検討されたアイディアでもいい。

3分間の光速デモを行う

アイディアの素をチームで共有するために3分間の光速デモを行う。 アイディアの主な部分をビッグアイディアと呼びホワイトボードにメモしておく。

ここまでの作業はあくまでみんなでアイディアを共有し、チームの中に材料を取り揃えることを目的として行う。 ここで議論したりはとりあえずしなくていい。

スケッチを行う

今書き出したアイディアと月曜日に作ったマップとスプリントクエスチョンとどうすればメモは大切な素材集となる。 これからこの素材集を使ってソリューションを構築する。

その前に

ソリューションを構築していくためには「スケッチ」を行うが、チームのメンバーと誰がどの部分を担当するのか?それとも分担したりせずみんな同じ箇所を攻めるのかと言ったことはあらかじめ相談しておくこと。

なぜスケッチを行うか?

スケッチを行うことで抽象的なアイディアに具体性を持たせる。 抽象的なアイディアは具体性に乏しいので間違って評価されることが多い。 具体性がないので過小評価されたり、逆に過大に期待されたりする。 これに対してスケッチを行って具体的になったアイディアは公平な評価を受けることができるので、スケッチを行って具体的なアイディアにしてあげることが大事。

どうスケッチを行うか?

以下の4つのステップに沿って行うと良い。

  • メモ-24時間のベストヒット集を作る-
  • アイディア-落書き帳のようになんでも書く-
  • クレイジー8-高速でバリエーションを考える-
  • ソリューションスケッチ-3コマで全体像を見る-

メモ-24時間のベストヒット集を作る-

月曜日と火曜日のこれまでに作ってきたモノを見返して、気になったものをメモにとる。 20分くらいでこの作業を終える

アイディア-落書き帳のようになんでも書く-

20分くらいでざっくりしたソリューションのアイディアを書く。 自分しか見ないから適当に書けばいい。

クレイジー8-高速でバリエーションを考える-

上で作ったアイディアのバリエーションを8分で8個考える(ように頑張る)。 無茶なチャレンジではあるが、無難な原案をより興味深いものに押し拡げるためにとてもいい方法らしい。 同じアイディアの「これをやるための良い方法」としてのバリエーションをたくさん考えることが大事。

ソリューションスケッチ-3コマで全体像を見る-

ソリューションの全体像を3コマで表す。 顧客がサービスを利用するときに目にするものを、3つのコマからなるストーリーボードで表す。

最後に作成したソリューションは水曜日の朝いちばんに、全員で見えるように壁に貼りだして品評を行う。 なので、わかりやすく書くこと。 また、品評に影響を与えないように匿名にしておくことも大切。 キャッチーなタイトルを自分のソリューションにつけて、下手でも構わないので仕上げる。

基本的には1人1つのスケッチを描く。 ひらめきが止まらなければ複数書いてもいいが、収穫逓減の法則があるのであまり良い結果には繋がらないのが著者たちの考えとのこと。

最後に、ソリューションを回収し 他の人のスケッチは見ない。 初めて見る体験をできるのは1度きりなので、それは品評会の水曜日まで取っておくこと。