オルトプラスエンジニアの日常をお伝えします!

改めて「ITエンジニアのための機械学習理論入門」を改めて読む 〜第1章〜

みなさんこんにちは。オルトプラスラボに入ったばかりの橘です。
よろしくお願いします。

もう機械学習、すごいですね。
機械学習と言うか、ディープラーニングというか、人工知能というか。
すべてトレンドの域を通り越して、ベーシックになっています。


さて、機械学習の入門書にこのような名著があります。


ITエンジニアのための機械学習理論入門

ITエンジニアのための機械学習理論入門

現在、Googleでご活躍されている中井悦司さんが執筆された「ITエンジニアのための機械学習入門」という本です。この本は機械学習に必要な数学のセンテンスを解説しつつ散りばめつつ、あまり数学的な理解とかけ離れないようにソースコードが書かれているため、入門書としては最適な本だと思います。そんな本を不躾ながら更に噛み砕いてみようというのがこの連載です。この本を手元に、数学的な理解の支えをできたら幸いです。手元にない方はポチりましょう!

また、本の中のソースコードは数学的な理解を目的にアルゴリズムを1から実装していますが、面倒なので 楽したいなので 怠けたいので とても便利なライブラリである「numpy」や「scikit-learn」がありますので、そちらで簡単に実装してみようと思います。


今回は第1章です。第1章は正規分布についてお話したいと思います。

正規分布とは

正規分布とは、次のような数式です。


 N( x | \mu, \sigma^2 ) = \frac{1}{\sqrt(2 \pi \sigma^2 )} \mathrm{e}^{ - \frac{(x - \mu)^2}{2 \sigma^2}}

上の式を見てわかった方は、ブラウザタブをそっ閉じしてください。


正規分布がなんなのかと言われると、「データって結構、平均値に集まるよね〜」というようなものをちょっとだけ難しく書いている式です。ちょっとだけ難しく書いているのにも理由があって、正規分布はとても便利な式になっています。
という話は後に取っておいて、正規分布をグラフで表現するとよく見覚えのあるかと思われるグラフになります。



f:id:s_tachibana:20170707175833p:plain

このグラフは平均が0の正規分布です。ですので、ある確率的に起こる事象がこの正規分布に従うときというのは、「0の付近の値を取りやすいよ」という意味になります。また、分散という考え方があります。分散というのは「どれくらい平均より遠い値に散らばりやすいか」を表す値です。平均より遠くの値を多くとるようなデータの場合は分散の値が大きくなり、グラフがなだらかになります。


f:id:s_tachibana:20170707181254p:plain


逆にデータがある値に集中するときは先の尖ったグラフになります。

f:id:s_tachibana:20170707181400p:plain


ここで確率あるあるのサイコロの例に一度移ります。サイコロは、どの目も同じ確率で出るサイコロです。この時、「2〜5の値を取る確率は?」と言われると、

 \frac{1}{6} + \frac{1}{6} + \frac{1}{6} + \frac{1}{6} = \frac{2}{3}

であることはおそらくすぐにわかると思います。同じように正規分布も「足す」ことで、ある値からある値までを取る確率を求めることができます。具体的にはある値からある値まで面積を求めていきます。

f:id:s_tachibana:20170707184201p:plain


また、サイコロも「1〜6の値をとる確率は?」といわれると当然1になりますが、ここが正規分布の便利なところで、正規分布もすべての面積を求めると1になります。ここが正規分布が便利と言われる所以です。

f:id:s_tachibana:20170707185238p:plain


ちなみに、1章や2章などでデータに誤差を与えている部分に正規分布が使われていますが、これは次の図のように誤差を与えています。

f:id:s_tachibana:20170707190013p:plain

見づらいかもしれませんが、極端な誤差を与えることがないよう、極力平均0に近い範囲で誤差を出しているわけです。正規分布はこのような場面でも使われます。

まとめ

この連載は、少なくとも「ITエンジニアのための機械学習入門」が終わるところまでは続けます!(宣言)この記事はあくまでも「ITエンジニアのための機械学習入門」の補助になるといいなぁ、というつもりで書いていますので、本をざっと読み、対応する記事を読んだあとにもう一度本を読むことで理解が進むはずです!(希望)今からでも遅くはありません。一緒に機械学習を学びましょう!(切望)

ブロックチェーン記事の執筆について

みなさんこんにちは。オルトプラスラボの竹田(id:mitsutaka-takeda)です。

今回、技術評論社が出版しているSoftware Designにブロックチェーンの記事を書く機会を頂いたので、その時の経験を書こうと思います。

ブロックチェーンってなに?

ぜひ、Software Design 2017年5月号をご購入して、「いまから学ぶブロックチェーンのしくみ」をご覧ください。まだブロックチェーンに触れたことがない方向けの内容になっております。ブロックチェーンに関する重要なコンセプト、技術的な概要、応用面が書かれた記事です。

http://gihyo.jp/magazine/SD/archive/2017/201705

執筆の流れ

執筆が決まったのは2月頭ぐらいでした。そして2月末には目次を提示して3月の中頃に原稿の提出。その後2週間ほどかけて原稿の訂正を行いました。

今回の記事では、弊社嶋田(id:cimadai)と2人での共同執筆でした。章ごとに分担を決め、各自担当の章を書き、お互いにレビューを行うという形で作業を進めていきました。

執筆作業について

今回の記事では、1ページ1000文字で10ページ、約1万文字を目安に執筆を行いました。私は雑誌記事への投稿は初めてで、執筆がどのくらいの大変さになるか想像できませんでした。共同執筆者の嶋田は過去に技術書を執筆した経験があり、彼から「大変だよ」と聞いていたので、書き始める前はかなり不安でした。実際は、1度書き始めると逆に文量が想定より多すぎて最終的には削ることになりました。2人で10000文字という少なめのボリュームのおかげかもしれません。

執筆を行う上で気を付けたことは、なるべく読者に前提知識を要求しないことです。普段の開発チームでのコミュニケーションでは、同じ知識を共有しているものとして専門用語でも何気なく使ってしまいます。導入向けの記事では、何気ない専門用語でも(全体から見れば重要ではない用語であっても)、理解の妨げになる可能性があります。専門用語を多用しない、または、使用する専門用語は初出時に適切な説明を付けるようにしました。難しかったのは何を専門知識や用語とするかです。1度知ってしまうと何が難しくて理解しづらかったのか忘れてしまい、自分たちだけでレビューしてもなかなか理解しづらいことに気づけません。今回はブロックチェーンに関しては聞いたことがあるが中身は知らないエンジニアの方にレビューをお願いしました。

共同執筆について。技術書執筆の経験者がおり、執筆作業の流れについて知っていたため、スムーズに作業を進めることが出来ました。原稿の共有、バージョン管理はgitです。構成や書くことに詰まった時、相談できる相手がいるのは心強かったです。

最後に

今回は2か月ほどで10ページという余裕のある(?)スケジュールでしたが、連載を持たれてるエンジニアの方は、どのように連載をこなしているのか頭が下がる思いです。

共同執筆は執筆の敷居を下げてくれる大きな要因でした。書く機会はあるけど1人ではなかなか始めることができないという方は共同執筆できそうな人を探してみるのはいかがでしょうか。

Software Designの記事を通じて、ブロックチェーンについてより多くのエンジニアに興味を持ってもらえることを願っています。

いろはハッカソンに参加してきました。

みなさんこんにちは。 しぶやちほーで働くオルトプラスラボの嶋田(id:cimadai)です。

f:id:d-shimada:20170314001714p:plain

ブロックチェーンしてますか?

以前以下のようなセミナーを開いたのですが、それ以来ブロックチェーンの虜になっている今日このごろです。

techblog.altplus.co.jp

そんな中、東京大学で情報社会基盤卓越講義の一貫で「ブロックチェーン・ハッカソン〜irohaで作る新たな未来〜」 というハッカソンが開かれましたので参加してきました。

irohaって?

irohaとは、ソラミツ株式会社が作成したブロックチェーンで、昨年10月にIBMのFabric、IntelのSawtooth Lakeに 続いて3番目にHyperledgerプロジェクトに受諾されたプロジェクトです。

ソースコードはすべてGitHubで公開されており、誰でも利用可能なものになっています。

github.com

プロジェクト名も和風ですが、コード中の命名も「鳥居(torii)」「皇(sumeragi)」「天地(ametsuchi)」など 中二心をくすぐられるものになっているのも特徴です。

irohaハッカソン

第8回 情報社会基盤卓越講義 (2017/3/11-12) - 情報社会基盤卓越講義

東京大学の大学院情報学環・情報社会基盤卓越講義シリーズの第8回として開催されたもので、 「irohaを活用して社会的課題解決につながるサービスを提供できるようなアプリを開発する」 というお題のものでした。

なにを作ったか

「ちょいサポ」というアプリで、地域の課題・依頼を地域(にいる人)で解決するという 課題・依頼の地産地消を目指したアプリです。

f:id:d-shimada:20170314105544j:plain

チームは本当にいろいろなフレンズがいて、アイデアを出してくれたりパワポをまとめてくれたり発表の準備をしたりというエンジニアじゃ無い方々と、 フロントエンドやインフラ、サーバサイドとそれぞれ分担できるエンジニアがいてとてもバランスのいいチームでした。

その中で私の担当部分としては、PlayFrameworkを使ったサーバサイドと、irohaのビルド、Scalaからirohaを利用するコードを書いて実際にirohaとのつなぎこみを行いました。

今回のハッカソンのお題と、作ったアプリのコンセプトがマッチしていることと 実際にirohaと連携ができているという点が評価されて最優秀賞を頂くことができました! f:id:d-shimada:20170314105745j:plain

最終的な構成としてはこんな感じです。 f:id:d-shimada:20170314105553j:plain インフラは僕のAWSがあるから、と言ってくれたチームリーダーには驚きましたが、とても感謝しています。

なお、Scalaからirohaを利用するコードは、後日切り出してライブラリとしてGitHubに公開しています。

github.com

さらに光栄なことにirohaプロジェクトのメンテナにもなりましたので、これからはirohaに積極的に取り組んでいこうと思います。

おわりに

個人的には、実は初めてのハッカソンでしたので、立ち居振る舞いがよくわからずとにかく開発してた感じですが、とても楽しい経験でした。

オルトプラスラボはブロックチェーンが得意なフレンズを募集しています! 一緒に開発をしたいフレンズさんは是非オルトプラスにご応募ください。

ブロックチェーン、たーのしー!