2016年12月30日金曜日

「みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習」をUdemyで公開しました

初心者向け人工知能、機械学習のコースをUdemyで公開しました。
今年中であれば、私に個人的に連絡をいただければ無料クーポンをお渡しします。
その際は、評価とコメントをいただけると嬉しいです。

みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習




みんなのAI講座は、誰に対しても開かれた人工知能、機械学習の講座です。プログラミングや数学の事前知識はほとんど必要ありません。

難解な数式やプログラミングが学習の妨げであった方でも、問題なく学習できます。

文系や非エンジニアの方にもお勧めです。

500人以上にプログラミングを指導し、ワールドビジネスサテライトにも登場した経験豊富な講師が指導します。

本コースでは、人工知能技術全般の解説を行いますが、実際にを書くのは主に機械学習のコードです。

機械学習のコードは、人工知能の分野で最もメジャーなプログラミング言語、Pythonで記述します。

開発には、PyCharmという開発環境を使います。これにより、初心者の方が躓きやすい環境設定が大幅に楽になります。ターミナルなどのコマンドラインを開く必要はありません。

データの分類や、文字認識、株価分析などの実践も行います。

その他コースの特徴は、以下通りです。

理論よりも体験を、手を動かすことを重視します。
可能な限り、簡単な数学を用いて解説します。
必要な数学はグラフィカル、直感的に解説します。
ニューラルネットや機械学習などの難しい概念は、細かく分解して少しずつ学習します
プログラミング初心者、未経験者でも大丈夫です。プログラミング言語Pythonを基礎から勉強します。
機械学習の基礎が身につきます。機械学習のコードを一から実装します。既存の有名ライブラリの解説も行います。
なお、大学レベル以上の数学や、機械学習の深い理論の解説は行いませんのでご注意ください。

ディープラーニングに関しては、概念のみの解説となります。

こんな方におすすめ
人口知能、機械学習に興味があるが、最初のとっかかりが分からない方
人工知能、機械学習関連の分厚い書籍に辟易した方
人工知能、機械学習をビジネスで扱う必要に迫られた方
数学、プログラミングが人工知能学習の障壁になっている方
人工知能の学習を通してPythonプログラミングを身に付けたい方
文系の方、非エンジニアの方にもおすすめです

みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習

2016年12月26日月曜日

MetalでiOSアプリに宿る生命

iOS その2 Advent Calendar 2016 25日目の記事を投稿しました。

内容は、2016年12月14日にshibuya.swift#6で発表した内容に加筆を行ったものです。加筆内容は、主にGPUコンピューティング、生命や知性に関する個人的な観点です。
発表のレポートはこちら。
MetalでiOSアプリに宿る生命


今回の群知能の観察結果ですが、パラーメタの設定により急激に全体の振る舞いが変わる様子は、物理学でいう相転移に相当するかもしれません。また、個々の個体からは想像しがたい振る舞いを集団が示す様子は、複雑系、もしくは創発に当たるでしょう。
創発とは部分の性質の単純な総和にとどまらない性質が、全体に発現することです。例えば比較的単純なメカニズムの神経細胞の集合から、脳の複雑な機能が発現するのも一種の創発と考えられるかと思います。

人は千数百億個の神経細胞を持つのですが、線虫の仲間にはわずか302個しか神経細胞を持たないC.エレガンスという仲間がいるそうです。そして、その神経細胞同士の五千数百個のつながりは全て明らかになっています。

たったこれだけの神経細胞とニューラルネットワークで、この線虫は物理刺激に対する回避運動を行い、温度や化学物質の濃度と餌の有無を紐づけて記憶するそうです。まるで機械学習ですね。
(参考)エレガントな線虫行動から探る神経機能

人と同等の処理の能力を持ったニューラルネットワークを作ることは最先端のスパコンでも現在は無理ですが、線虫のような、いわば原初の知性とでもいうようなものであれば、MetalとiOSでも実現できそうに思えるのです。

並列演算という意味で、脳はGPUと似ているとよく言われます。スマートフォンは、現時点でもある意味外付けの脳のようなものですが、Metalの並列演算によりより生物の脳らしくなるのではないでしょうか。

詳細は、以下の記事をご覧ください。
MetalでiOSアプリに宿る生命

[iOS]MetalでGPUコンピューティング(13) スレッドについて

Metal Advent Calendar2016の24日目の記事を投稿しました。
Metal Advent Calendar2016の最後の記事となります。

本記事では、前回に引き続きAppleが提供するサンプルコードの解説を行います。
扱うサンプルコードは、前回と同じライフゲームのアプリ、MetalGameOfLifeです。
MetalGameOfLife

今回は、サンプルコード内で用いられているスレッドの概念について解説を行います。

詳細は、以下の記事をご覧ください。
[iOS]MetalでGPUコンピューティング(13) スレッドについて

2016年12月17日土曜日

[iOS]MetalでGPUコンピューティング(12) MTLRenderPipelineState

Metal Advent Calendar2016の17日目の記事を投稿しました。

本記事では、前回に引き続きAppleが提供するサンプルコードの解説を行います。
扱うサンプルコードは、前回と同じライフゲームのアプリ、MetalGameOfLifeです。
MetalGameOfLife

今回は、サンプルコード内のMTLRenderPipelineStateについて解説を行います。

詳細は、以下の記事をご覧ください。
[iOS]MetalでGPUコンピューティング(12) MTLRenderPipelineState

[iOS]MetalでGPUコンピューティング(11) MTLRenderCommandEncoder

Metal Advent Calendar2016の16日目の記事を投稿しました。

本記事では、前回に引き続きAppleが提供するサンプルコードの解説を行います。
扱うサンプルコードは、前回と同じライフゲームのアプリ、MetalGameOfLifeです。
MetalGameOfLife

今回は、GPUコンピューティングとは直接関係はありませんが、サンプルコード内のMTLRenderCommandEncoderについて解説を行います。

詳細は、以下の記事をご覧ください。
[iOS]MetalでGPUコンピューティング(11) MTLRenderCommandEncoder

2016年12月15日木曜日

shibuya.swift#6で発表しました

「MetalでiOSに宿る生命」というタイトルの発表を、2016/12/14(火)にshibuya.swift#6で行いました。
内容は、Metalの基礎、特性を把握するための実験、応用としての群知能の実装に関してです。
発表の機会を与えていただき、有難い限りです。
Metalの特性、群知能の挙動、秒間1000万回実行されるexp関数など、多くの方に興味を持っていただけました。















2016年12月14日水曜日

[iOS]MetalでGPUコンピューティング(10) Metal Shading Languageで記述されたライフゲームのロジック

Metal Advent Calendar2016の14日目の記事を投稿しました。

本記事では、前回に引き続きAppleが提供するサンプルコードの解説を行います。
扱うサンプルコードは、前回と同じライフゲームのアプリ、MetalGameOfLifeです。
MetalGameOfLife

今回は、Metal Shading Languageにより記述されたライフゲームのロジック部分について解説を行います。

詳細は、以下の記事をご覧ください。
[iOS]MetalでGPUコンピューティング(10) Metal Shading Languageで記述されたライフゲームのロジック

[iOS]MetalでGPUコンピューティング(9) MTLComputePipelineState

Metal Advent Calendar2016の13日目の記事を投稿しました。

本記事では、前回に引き続きAppleが提供するサンプルコードの解説を行います。
扱うサンプルコードは、前回と同じライフゲームのアプリ、MetalGameOfLifeです。
MetalGameOfLife

今回は、サンプルコード内のMTLComputePipelineStateについて解説を行います。

詳細は、以下の記事をご覧ください。
[iOS]MetalでGPUコンピューティング(9) MTLComputePipelineState

2016年12月12日月曜日

[iOS]MetalでGPUコンピューティング(8) MTLComputeCommandEncoder

Metal Advent Calendar2016の12日目の記事を投稿しました。

本記事では、前回に引き続きAppleが提供するサンプルコードの解説を行います。
扱うサンプルコードは、前回と同じライフゲームのアプリ、MetalGameOfLifeです。
MetalGameOfLife

今回は、サンプルコード内のMTLComputeCommandEncoderについて解説を行います。

詳細は、以下の記事をご覧ください。
[iOS]MetalでGPUコンピューティング(8) MTLComputeCommandEncoder

2016年12月11日日曜日

第02回てくてく勉強会を主催しました

様々なバックグラウンドのエンジニアが集まる勉強会、第02回てくてく勉強会を主催しました。

会場はTekuru四ツ谷教室で、主催はエンジニアの酒井さん、武田さんと私(我妻)です。
参加者は全部で13人、インフラエンジニア、ウェブエンジニア、モバイルエンジニア、SIerなど様々な分野のエンジニアの方が集まりました。

初回のテーマは”TensorFlow”です。Firebase、AWS Lambdaなど、様々なサーバーの設定や運用が不要のサービスが出現しており、将来的な動向が気になるところです。

勉強会は”他己紹介”から始まりました。
自分ではなく他の方を紹介することで、参加者の皆さんに交流のきっかけをつかんでいただけたかと思います。

もくもく会を挟んで、片桐さんのプレゼンです。


 本格的な資料も用意していただき、有難い限りです。
片桐さんは素粒子物理の研究をされているだけあり、本格的な数式を用いての機械学習の解説になりました。
このようなお話が聞ける機会、本当に貴重です。

 半はビールを飲みながらのもくもく会でした。一人でTensorFlowを試行錯誤している方も、技術話で盛り上がっている方もいました。

懇親会は四ツ谷のひつじやで。
レバノンやモロッコ、チュニジアの料理をキプロスのワインで流し込みました。


 
今後とも、多様な分野のエンジニアの接点になるようなテーマを選んでいけたらと思います。来月もまた開催しますので、イベントの公開を楽しみにしてくださいね。





今回の皆さんの学習内容です。
@が学習目標、☆が今回の結果、→が次回のテーマの希望です。

ひさはらさん
デザイナー
@デザイン関連(ジョジョ)
☆アニメーションさせる素材ができた
→Live 2DとSpineのアニメーションのツール

なかもとさん
サーバーエンジニア
@AWSのGPUインスタンスでAnaconda、TensorFlow
☆インスタンスにはAWSに連絡が必要、ローカルでTensorFlow
→AWSラムダ、スクレイピング

うえまつさん
マーケター
@機械学習を仕事の参考に
☆MINSTのインストール
→数字以外の画像データ以外の認識

(匿名希望)さん
プログラマ
@機械学習のゲームアプリを作る、アンテナを張っている
☆ゲームのモデル、シミュレータのデータ
→機械学習の概要の把握

むかいさん
Rails、Webエンジニア
@TensorFlowの使い所をみつける
☆TensorFlowの環境作成
→機械学習のAPIのための基礎

いむらさん
サーバーサイドWebエンジニア
@Jupiter NotebookでTensorFlowの学習
☆MNIST for beginnersをJupiter Notebookで実行、コードリーディング
→静的型付き言語、Server side Swift

やなぎさわさん
SIer
@機械学習の学習、TensorFlowのチュートリアル
☆TensorFlowのチュートリアル
→機械学習系

まつもとさん
Web、Railsエンジニア
@TensorFlowのチュートリアル
☆MINIST for beginnersの続き
→React

さとうさん
PHPエンジニア
@TensorFlowで何ができるか
☆環境構築、チュートリアル、最急降下法
→React.js、Riot.js

かたぎりさん
iOSエンジニア
@TensorFlowのチュートリアル
☆質問内容の調べ物
→OpenGL、Metal

みやまさん
Saleceforceの🍳エンジニア
@Saleceforceのミニハック対策

たけださん
Saleceforceエンジニア
@Slaeceforceミニハック対策
☆Salceforceのイベントの対応、課題を7つ中2つ解決、みやまさんに指導、出張申請を楽にする、ライトニングデザインフレームワークのチュートリアル
→Salceforce Einsteinで人工知能

あづま
iOSエンジニア
@UdemyのコンテンツにTensorFlowを絡める
☆会の滞りない運営
→人工知能関連

2016年12月10日土曜日

[iOS]MetalでGPUコンピューティング(7)

Metal Advent Calendar2016の10日目の記事を投稿しました。

本記事では、前回に引き続きAppleが提供するサンプルコードの解説を行います。
扱うサンプルコードは、前回と同じライフゲームのアプリ、MetalGameOfLifeです。
MetalGameOfLife

今回は、サンプルコード内のMTLCommandBufferについて解説を行います。
MTLCommandBufferのオブジェクトはGPUに引き渡されるエンコードされた命令を格納しています。
MTLCommandBufferはクラスではなくプロトコルです。
MTLCommandBufferのオブジェクトは、MTLCommandQueueにより生成され、生成元のキューの内部でのみ実行することができます。全てのコマンドバッファは、生成元のコマンドキューに追加された順番に実行されることが保証されています。
コマンドキューの生成は一度だけですが、コマンドバッファは毎フレームごとに生成、実行されます。

詳細は、以下の記事をご覧ください。
[iOS]MetalでGPUコンピューティング(7)

2016年12月9日金曜日

[iOS]MetalでGPUコンピューティング(6)

Metal Advent Calendar2016の9日目の記事を投稿しました。

本記事では、前回に引き続きAppleが提供するサンプルコードの解説を行います。
扱うサンプルコードは、前回と同じライフゲームのアプリ、MetalGameOfLifeです。
MetalGameOfLife

今回は、サンプルコード内のMTLCommandQueueについて解説を行います。
MTLCommandQueueはコマンドバッファ(MTLCommandBufferのオブジェクト)のキューです。また、MTLCommandBufferのオブジェクトの生成にも用いられます。
コマンドバッファはGPUに引き渡されるエンコードされた命令を格納しています。
MTLCommandQueueはクラスではなくプロトコルです。
コマンドキューはスレッドセーフで、複数のコマンドバッファを同時にエンコードすることができます。

詳細は、以下の記事をご覧ください。
[iOS]MetalでGPUコンピューティング(6)

2016年12月8日木曜日

[iOS]MetalでGPUコンピューティング(5) MTLLibrary

Metal Advent Calendar2016の8日目の記事を投稿しました。

本記事では、前回に引き続きAppleが提供するサンプルコードの解説を行います。
扱うサンプルコードは、前回と同じライフゲームのアプリ、MetalGameOfLifeです。
MetalGameOfLife

今回は、サンプルコード内のMTLLibraryについて解説を行います。
MTLLibraryを用いることでGPU側の言語Metal shading languageの関数を、CPU側の言語Objective-CやSwiftで扱うことが可能になります。
MTLLibraryはクラスではなくプロトコルです。
MTLLibraryに従うオブジェクトは、Metal shading languangeのソースコードを含んでいます。
シェーダーファイル内にあるソースコードはビルド時にコンパイルされ、文字列で書かれたMSLのコードはランタイム時にコンパイルされます。
MTLLibraryのオブジェクトを生成するためには、MTLDeviceのメソッドを用います。
コンパイル済みのバイナリからライブラリを作る場合は、以下のメソッドのどれかを用います。
  • newDefaultLibrary()
  • makeLibrary(filepath:)
  • makeLibrary(data:)
また、ランタイムでテキストからコンパイルしライブラリを作る場合は、以下のメソッドのどれかを用います。
  • makeLibrary(source:options:completionHandler:)
  • makeLibrary(source:options:)
 詳細は、以下の記事をご覧ください。
[iOS]MetalでGPUコンピューティング(5) MTLLibrary

Metal、GPU関連のスライドを2つ紹介

Metal、GPU関連で最近印象に残ったスライドを2つ紹介します。

1. Metal と Vulkan を用いた水彩画レンダリング技法の紹介

・OpenGL ESでは、シェーダーの字句解析、構文解析、最適化、命令コードの生成の全てはドライバがランタイム上で実行している
・Metal、Vulkanなどがある低レベルAPIは、コンシューマ機では一般的であった
・Tile Based Rendering: レンダリング時は可能な限りシステムメモリへのアクセスを避ける。高速なOn-Chip上のメモリに置かれたタイルバッファへの読み書きを行う。
・Metal、VulkanはこのTBRアーキテクチャに最適化されている
・Metal、Vulka世代では、明示的にValidation Layerを有効にすることで、API呼び出しのエラーチェックを実施する。

2. GPU最適化入門

・GPUを知る上で欠かせない3つの特徴は、1. レンダリング理論、2. 長いパイプライン処理、3. 並列性
・GPUは、レンダリング方程式[1986 Kajiya]を概念的に近似して実装している
・GPUの最適化は、GPUパイプラインを円滑に流すことに集約できる
・GPUはパイプラインが長いため、どこかが詰まると、すべてが滞留してしまう

2016年12月7日水曜日

[iOS]MetalでGPUコンピューティング(4) MTKView

Metal Advent Calendar2016、7日目の記事を投稿しました。

本記事では、前回に引き続きAppleが提供するサンプルコードの解説を行います。
扱うサンプルコードは、前回と同じライフゲームのアプリ、MetalGameOfLifeです。
MetalGameOfLife

今回は、GPUコンピューティングとは少々離れるのですが、サンプルコード内のMTKViewについて解説を行います。
MTKViewはMetalKitフレームワークに含まれるUIViewを継承したクラスで、比較的シンプルな方法でMetalによる描画を行うことができます。

[iOS]MetalでGPUコンピューティング(4) MTKView 

2016年12月6日火曜日

[iOS]MetalでGPUコンピューティング (3)

Metal Advent Calendar2016の6日目の記事を、Qiita
に投稿しました。

今回の内容は、Appleが提供するMetalのサンプルコード、MetalGameOfLifeに関するものです。
MetalGameOfLife

上記は実行画面です。
いわゆるライフゲームのアプリですが、Metalの並列プログラミングについての良いデモとなっています。

今後、何回かに分けてこのサンプルコードを解説する予定ですが、今回は主にMTLDeviceについて解説を行います。
MTLDeviceは単一のGPUのインターフェイスです。
MTLDeviceなどのMetal関連の機能の多くははクラスではなくプロトコルなのですが、Metalが動作するデバイス毎にオブジェクトの型が異なるので、実装よりもインターフェイスを重視したためと思われます。
 (参考)objc.io

詳細は以下の記事をご覧ください。
 [iOS]MetalでGPUコンピューティング (3)

2016年12月3日土曜日

sibuya.swift #6で発表します

12月14日(火)のsibuya.swift #6で発表します。
内容はiOSのMetal関連になるかと思います。
発表時間は15分です。
既に41人の発表枠に104人の申し込みがあり、iOSエンジニアに大人気の勉強会です。
どれだけ多くの方がMetalに興味を持っているのか分かりませんが、多くの方とディープな技術に関して交流ができればと思います。
https://shibuya-swift.connpass.com/event/42712/