マエカワの備忘録的な何か

思い立ったが吉日

知的情報処理 其の四 20171027

推論の残り

帰納推論

 規則を見つける。データ群から一般法則を導くことができる。文法・関数・モデル推論などの種類がある。
 簡単に書くと、「全ての正例(条件に合う例)を満たし、負例(条件に合わない例)を一切満たさない一般法則を導く」といえる。この推論では、正例も負例も大事になってくる。

アーチの概念を導く

 ここで紹介されたのは、「アーチの概念を導く」ための例の与え方。
 ただ単に辞書を与えるだけでは、意味どうしの関係がわからないため、意味ネットワークを用いる。例をどんどん与えていき、そこにある共通項を認識できたら理解したとみなしていく。これができなければ、人間的ではない。
 正例と負例をどんどん与えて、照合。拘束化(特殊化)・一般化を行っていく。具体的な手順を画像で表してみる。説明は画像の後に書いていく。

f:id:maekawa_yoshimiki_1119:20171105020632j:plain

  1. (正例1)AをBとCが支えるものがアーチである
  2. (負例1)BとCがAの上にあるのはアーチではない
  3. (負例2)BとCが接しているのはアーチではない
  4. (正例2)Aの形は三角柱でもアーチである

こんな感じで、アーチであるものとアーチでないものの差分を取って、概念を獲得していく。

  • 正例:一般化に使う
  • 負例:拘束化に使う

これだけは覚えておく。

複雑系

 システムを構成する要素の動きが環境によって動的に変化するのが特徴。

創発

 構成要素の相互作用によって、構成要素一つでは説明できない上位の概念が出てくることを言う。今までの人工知能とはけた違い。自ら考えて成長していく。
 ここで、ボトムアップトップダウンという言葉が出てきた。創発と・システム・システムの秩序の処理関係についてどちらも言っている。

還元主義

 部分を理解することで、全体を理解できるという考え方。
 しかし、複雑系はこの還元主義的な考え方では全て説明ができない。ここから、「還元主義ってホントにいいの」っていう動きが高まってきた。この動きを脱還元主義という。

進化的計算

 この複雑系を解決する手法として「進化的計算」が挙げられる。その名前の通り、自分で進化していくための計算。人工生命・ネットワークモデルなどのモデルがある。

遺伝的アルゴリズム

 ここでは、遺伝的アルゴリズムを紹介する。この方法は、生物の進化の過程をそのままプログラムにした感じ。以下にプロセスを書いていく。

  1. 初期集団の生成(ランダム)
  2. 適応度の計算
  3. 選択(適応度の高いものを選択)
  4. 交叉(選択したもので子孫を作る)
  5. 突然変異(数%の頻度で起こるのが望ましい)
  6. 2. に戻る

この処理を繰り返していくことで、適応しないものは淘汰。適応するものは生き延びていく。結果として、より良い個体が残る。この遺伝的アルゴリズムを使った動画を講義で見たので、貼っておく。


遺伝的アルゴリズムでブランコの漕ぎ方を学習させた。genetic algorithm Long

付けたし

 今回のメインテーマは遺伝的(進化)アルゴリズムでしたが、これを実装するなんていうサイトは探せば腐るほど出てきます。今回出てきた動画などは母数を多くして、進化速度を早くしていますが、これを一つの個体で行ったらどうなるのか…。それこそ究極の人工生命体なのかななんて思ってたりしてます。それと、物理エンジン面白い。やってみようかな…。
 遺伝的アルゴリズムについて解りやすく書いてあるサイトを見つけましたので、貼っておきます。
qiita.com

ソフトウェア工学 其の四 20171026

 ここまででソフトウェアの種類が四つほど出てきたが、もう少し分類することができる。

テスラについて

 テスラにはバカでかいタブレットがついているらしい。世間の認識は「タブレット付きの車」だろうが、実際は「車付きタブレット」のほうが正しい。組込みシステムの説明でもあった通り、今やブレーキ・アクセルなどのあらゆる制御系はワイヤでつながっている。既にコンピュータが無ければ、実現しないことばかりになっている。

コンピュータは借りる時代に

 今までは、「スペックの高いコンピュータが欲しい」となったとき、秋葉原で部品を買って、OSをインストールして、どこに置いたら一番いいか…などを考える必要があり、大変だった。しかし、今やコンピュータは大元から借りる時代になっている。時代は常に変わっていき、そのうち「え、今更コード書いてるんですか?www」なんていわれる日が来るかもしれない。新しい技術とは常に触れ合っておかなきゃならんということです。

世界を変えるために

 今はアイデアとテクノロジー、執念深さがあれば世界を変えることができる。
 「こうなったらいいなぁ」という世界をありありと想像できると、資金が調達できる。今はクラウドファンディングとか、資金調達は比較的しやすくなった。しかし、自分で想像できていないことには誰も投資しない
 クレイジーなアイデアが出てきたら、とにかく「どうしたらいいですか」と聞きに行くことだ。それに対しての応答パターンはいくつかある。

  • イデアをくれる
  • 技術をくれる
  • 金をくれる
  • 人脈をくれる
  • バカにされ、取り合ってもらえない

上四つに当てはまるところへ聞きに行こう。

適度な抽象度

 ものを考えるために適した抽象度がある。認知工学で出てきた「基本レベル」がこれに当たる。想像しやすく、かつ応用がききやすい適度な抽象度。うまいところを取るのは大変だが、ここを抑えれば物事をスムーズに考えることができる。

ソフトウェア工学で頭がよくなる

 ソフトウェアの適切なテストの仕方、その効果を適切に理解することで、ものの考え方が分かる。結果として頭がよくなる。そして、この考え方はソフトウェアだけでなくテスト(確認)が必要なあらゆることに適用することができる。

バグは連鎖ででかくなる

 トラブルは早めに対処するべし。最初の1は最後の1000.実際に、一つのバグがとんでもない損失を生んだ事例がある。

  • ソースコードが1行余分だったことで11億円の損失
  • 浮動小数点のオーバーフローで自爆コマンドが軌道→自爆→4億円の損失

他にもきりがない。

Vモデル

 ここから本命のVモデルについてやっていきます。Vモデルとは、ウォーターフォール型モデルの一種で、上流に分析・設計、下流にテスト工程が配置されているものになる。Vモデルの工程は全部で8種類。

  1. 要求分析:顧客の要求を分析する
  2. 基本設計:大まかな方向性を決める
  3. 詳細設計:実装する機能を決める
  4. コーディング・実装:実装する
  5. コードインスペクション:プログラムが約束通りに書かれているかの確認
  6. 単体テスト:一つ一つの機能が正常に動くのかテスト
  7. 結合テスト/機能テスト*1:それぞれの機能の関係が正しいかテスト/それぞれの機能が動くかテスト
  8. システムテスト:あらゆる環境下で動くのかテスト

この8個のプロセスをV字に並べたものがVモデルになっている。

f:id:maekawa_yoshimiki_1119:20171102200417j:plain:h400

 何をすればいいのかが明確にわかっているときは、このVモデルプロセスを1度回せばいい。しかし、明確にわかっていない場合はシステムを小分けにして、それぞれについてVモデルを回す方法をとる。この方法をスパイラル開発モデルと呼び、ウォーターフォール型モデルと並ぶ基本的な開発モデルになっている。

技術指向から品質指向へ

 お客様がいかに満足するかを第一に考える
 結局、一番コストをかけずにシステム開発をするためには、高品質なシステムを作らなければならない。バグを残してしまうと、その後のデバッグに時間を取られてしまい、手戻りが発生する。これが余計なコスト増加の主な原因だ。バグのない、品質が高いシステムを納品することで、結果的にコストを減らすことができる

銀の弾丸はない

 では、高品質のシステムを作るにはどうしたらいいのだろうか。これには近道はない。そういった意味で「銀の弾丸はない」。地道にテストを回して、作り上げていくしか方法はない。

簡単な考えるテスト

 ここで、簡単な考え方のワークをやったので、紹介。

 12階建てビルのオーナーからの依頼。

エレベーターの回転率が悪く、社員の不満がたまっている。どうにかして不満をなくしてほしい。

とのこと。エレベーターは二台あると仮定する。さて、どのように改善するのがいいだろうか。コストはなるべくかけないように。

 答えは多様に存在。途中「理系だろー?」の声を聞いて、やっぱアルゴリズムかぁと思って考えていたら、答え聞いて「だまされた…」と。鉄のカナヅチで木のクギを叩くべからず
 一応、自分で考えた解決案をいくつか…。

  • 1~3階にはエレベーターが止まらない
  • 片方のエレベーターを上り専用にする

ここで公開しているってことは、これが答えではないってことですよね…。もっと、簡単に解決を図ることができます。

レポート課題1

 ここで、一回目のレポート課題が出されました。課題は

いい感じに通信して、儲かるシステムの提案をせよ

です。自由度高すぎてどないすればいいのか…。とりあえず考えています。
 これまでの講義でも出てきた通り、「見えないものを見る能力」「価値とは何か」「ブランディング」ということを念頭に置いてやっていくのがよさそうです。ネットワーク外部性なんかも考慮に入れるべきでしょうね。
 最悪な回答は「oooな機能を持ったシステム」。どのようなことが問題点で、そこにどのようなアプローチができて、その中から最善・現実可能なシステムの「提案」をしろということです。多分。
 これができる人を企業も欲しがるんだろうな、なんて思っています。

付けたし

 とうとう課題が出されましたが、提案するシステムによって何を追求するべきなのか、どのような路線で戦略を練っていくのかなど考えていかなきゃならなそうです。ただ提案するだけじゃなく、ビジネスを見据えた提案をいかにしてするのか。これから研究、プレゼンテーションなど、様々なシチュエーションで求められるスキルだと感じます。

*1:会社によってはやっていない、またはシステムテストと同時にやっている