うさがにっき

読書感想文とプログラムのこと書いてきます

ARCoreでプロ生ちゃんだしてみた

概要

ARCore Preview2も出たことだしプロ生ちゃんだしてみた (この記事はある程度Unityが触れる人を対象にしています)
この記事はプロ生ちゃんAdvent Calendar 2017の記事です
adventar.org

詳細

ARCoreとは

プロ生ちゃんを出すまで

adb install arcore-preview2.apk

結果

f:id:tiro105:20171218191714p:plain
なんか重力が上むいてる・・・

感想

  • アニメーション、音声とかつけると夢広がりそう
  • デフォルトだと端末が熱くなる、改善できそう
  • 重力問題なんとかしたい、スパッツ必須
  • ARKitを違って一回Pauseしちゃうと全てがresetされる、保存するのに何か必要なのかな?
    • known issueで上がってた ArSession_configure() does not apply settings changes if called while in a resumed state.

読書感想_人工知能は人間を超えるか

人工知能は人間を超えるか

概要

  • 近年メディアを騒がせている人工知能について「本当にすごいこと」か「実はそんなにすごくないこと」を判断するために、人工知能の研究の歴史を読み解く

人工知能とは何か

  • この本における人工知能は「人のように考えるコンピュータ」
    • この定義にのっとるコンピュータはまだ完成していない
    • 専門家における定義は専門家によって異なる
  • 人間の脳の活動は神経細胞を使った電気信号のやり取りなんだから、電気回路で再現できるというのが本書の基本的な考え方
  • 世間で言われている人工知能は以下の4レベルに分けることができる
    • レベル1:単純な制御プログラム
    • レベル2:古典的な人工知能
      ふるまいのパターンが極めて多彩なもの
    • レベル3:機械学習を取り入れたもの
      推論の仕組みがデータをもとに学習されているもの、機械学習アルゴリズムの一種でありサンプルとなるデータをもとに、る0るや知識を自ら学習するもの
    • レベル4:ディープラーニングを取り入れたもの
      機械学習をする際の特徴量をコンピュータ自身で学習するもの

「推論」と「検索」の時代

  • ここから人工知能の歴史の話、人工知能はこれまでブームと冬の時代を繰り返してきた
  • ブームをまとめると以下の感じ
  • 「推論・探索」で探索木で迷路を解く、ハノイの塔などの問題が一見高速で解決できることからAIへの期待が高まった
  • 将棋、チェスなど限られた場所では活躍したが現実の問題は非常に複雑でありいわゆる「トイ・プログラム」しか解けないのではないか??という失望感が広がりいったんブーム終焉

Microsoft AzureのCognativeって推察のことだったんだ

「知識」を入れると賢くなる

  • 非常に複雑なら、それに対応するだけのデータ(知識)をコンピュータに事前に入れておけばいいんじゃないか?という考え
  • 現実すべては不可能だが専門分野の知識を入れて利用する「エキスパートシステム」の利用が期待された
  • 分野にもよるが、やはり必要になる情報の量が膨大、エキスパートシステムとなると情報を取得することにもコストがかかった
  • フレーム問題(あるタスクを実行するのに「関係のある知識だけを取り出して使う」)、シンボルグラウンディング問題(シンボルに対して意味を自分自身で紐づけることができない)
  • これらの問題からやはり人工知能無理じゃないか?となり再びブーム終焉

二回目のブームが終わるとさすがに心折れそうだなって思った

機械学習」の静かな広がり

  • 「知識」をいれる「学習」を「分ける(そのデータがある条件に対してイエスかノーか?)」ことの精度を上げていくこととして捉えた場合、コンピュータが大量のデータを処理しながら、この分け方を自動的に収集するのが「機械学習
  • いったん分け方が定義されればコンピュータはかなり精度高く「知識」を使える
  • この分け方がいくつかあるが人間の脳を模した方法が「ニューラルネットワーク
  • ニューラルネットワークは非常に優秀だが、データを分ける際の閾値的なもの、「特徴量」が必要になる
  • 「世界からどの特徴に注目して情報を取り出すべきか」をコンピュータ自身が決定できないことが人工知能への大きな壁だった

ニューラルネットワークについてはゼロからわかるDeepLearning(参考書籍にリンクあり)がよかった

静寂を破る「ディープラーニング

  • データをもとに、コンピュータ自身が特徴量を自らつくりだせる
  • ディープラーニングの考え方自体は昔からあったが、最近になって適切な使い方が見えてきた
  • ディープラーニングがすべてに利用できるわけではないが、これは人工知能の課題であった「世界からどの特徴に注目して情報を取り出すべきか」に対する一つの可能性を提示した

本章に対する作者の並々ならぬ思いが見えてきて非常に読み応えのある章

人工知能は人間を超えるか

  • 筆者が考えるこれからのディープラーニングから発生する流れ
    • 画像特徴の抽象化ができるAI
    • マルチモーダルな抽象化ができるよAI
    • 行動と結果の抽象化ができるAI
    • 行動を通じた特徴量を獲得できるAI
    • 言語理解・自動翻訳ができるAI
    • 知識獲得ができるAI
  • この流れで進めばコンピュータが今人間が持っている創造性などを持つことも可能だろう

最近Googleから発表された学習モデルを自ら作り出すロジックは大きな一歩なんじゃ?
http://news.livedoor.com/article/detail/13984245/

変わりゆく世界

  • ディープラーニングの出現によりさまざまなものへのAI利用が考えられる
  • 一般普及には時間がかかるかもしれないが確実に変化は訪れるだろう
  • 仕事の置き換えも起こるだろうが、そこから新たに生まれる職業もある

感想

関連書籍

今後のうさがにっきに書くこと

概要

今後のブログについて

詳細

今後のブログについて

いろんなメディアを使って記事を書き始めたのでこんな感じに今後は使い分けていこうと思う

  • 本の感想、雑記、アドベントカレンダーなどある程度まとまった技術の記事 うさがにっき

  • 軽い技術(やってみた)系の記事

    • Qiita qiita.com
    • mediumとかdev.toも書くかも
  • 動画で見ないとわからん系の何か用にyoutube使うかも

また増えたら追記する

20170723_週報

概要

今週の週報

詳細

技術

記事

Windows10上にTensorFlow_GPU環境構築 - Qiita

やっていること

今週中にやりたかったが長引いている・・・

PC

Surface Pro買った、今のところ便利
プレゼンで一度使ってみたい

読書

今週にシンギュラリティは近い読み終える予定だったが未だ4割程度、かなり内容が濃いので集中して来週中に読みおえたい

感想

  • しばらく生活のアウトプットを明確にしていなかったので振り返り的なものもできておらず良くなかった
  • 明確にしたことにより、思っている以上に進めていないということが把握できた
  • 同時に複数本はあってないことがわかったのでインプットは期間で絞って、パラレルには進めない

来週予定

  • 読書時間をきちんと確保して、読書効率を上げる、シンギュラリティは近い読み終えたい、できればアウトプットまで
  • Daydream 360動画プレイヤを作って詳細ブログにまとめる

20170620

概要

週報
いきなりさぼってしまったテヘペロ

詳細

Qiita

  • 細かい記事はQiitaにまとめることにした qiita.com

読書

バーチャルリアリティ学

バーチャルリアリティ学

  • ちまちまよんでる

Kotlinスタートブック -新しいAndroidプログラミング

Kotlinスタートブック -新しいAndroidプログラミング

  • 読み終えた
  • kotlinの文法から簡単なAndroidでの導入方法RxAndroidなどのとの簡単な使い方などスタートブックにという名にふさわしい入門書
  • 既存アプリ見直しつつここら辺見てみる www.meetup.com

ザ・ゴール ― 企業の究極の目的とは何か

ザ・ゴール ― 企業の究極の目的とは何か

  • ちまちまよんでる

VRコンテンツ開発ガイド 2017

VRコンテンツ開発ガイド 2017

  • ちまちまよんでる
  • まだ読み始めた感じだけど良い感じ

初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発

初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発

  • 仕事の都合上読んでる
  • 想像以上に入門書だな??

仕事

イベント

  • Google Cloud Nextでた
  • Jamboardよかった

## ゲーム - 崩壊3rd面白いぞ 美少女・萌え系ゲーム/アプリ「崩壊3rd」公式サイト

20170528

概要

週報を書いてみることにした
週にやったこと気になったことなどをまとめる

詳細

イベント

decode

de:code (decode) 2017 | 日本マイクロソフトの開発者/アーキテクト/IT Pro 向けイベント - Microsoft Events & Seminars

  • キップマンの話が聞けて嬉しかった
  • MicrosoftもAIに対してかなり熱い想いを持っているのを感じた
  • 日本でHoloLens売れすぎってのが面白かった

読んでる本

バーチャルリアリティ学

バーチャルリアリティ学

人間が現実を認識するところを体系的に学ぶことによりバーチャルリアリティを学術的にまとめた本
なかなか読み進められないが面白い booth.pm Unity力をつけていく
Kotlinスタートブック

Kotlinスタートブック

Kotlinおもしろい

仕事

  • Kotlinで遊んでいる
  • UnityにおけるMVPをディスカッション
  • VRサービスについて考えている

いろいろ

Kotlinやってみた(クラス関係編)

objectの生成

fun main(args: Array<String>) {
    var bucket = object {
        val capacity: Int = 5
        var quantity: Int = 0
        
        fun fill() {
            quantity = capacity
        }
        
        fun drainAway() {
            quantity = 0
        }
        
        fun printQuantity() {
            println(quantity)
        }
    }
    
    bucket.printQuantity()
}

interface

interface定義

interface Bucket {
    fun fill()
    fun drainAway()
    fun pourTo(that: Bucket)
    
    fun getCapacity(): Int
    fun getQuantity(): Int
    fun setQuantity(quantity: Int)
}

interface実装

fun main(args: Array<String>) {
    fun createBucket(capacity: Int): Bucket = object : Bucket {
        var _quantit: Int = 0
        
        override fun fill() {
            setQuantity(getCapacity())    
        }
    }

    ・・・
}

プロパティ

interfaceにプロパティを持たせることができる

interface Bucket {
    fun fill()
    fun drainAway()
    fun pourTo(that: Bucket)

    // プロパティ
    val capacity: Int
    var quantity: Int
}

interfaceを使ったプロパティの実装

fun main(args: Array<String>) {
    fun createBucket(_capacity: Int): Bucket = object : Bucket {
        // 
        override val capacity = _capacity
        override var quantity: Int = 0
        
        ・・・
    }
}

class

// コンストラクタをclass作成と同時に指定
class BucketImpl(_capacity: Int): Bucket {
    override val capacity = _capacity
    override var quantity: Int = 0
    
    override fun fill() {
        quantity = capacity
    }
    
    ・・・
}

classのインスタンス

newはいらない

fun main(args: Array<String>) {
    val bucketImpl: BucketImpl = BucketImpl(10)
}

メソッド

class Greeter {
    fun greet(name: String) {
        println("Hello $name!")
    }
}

fun main(args: Array<String>) {
    val greeter = Greeter()
    greeter.greet("kotlin")
}

プロパティ

class Person {
    var name: String = ""
    var age: Int = 0
}

fun main(args: Array<String>) {
    val hanako = Person()
    
    println(hanako.name)
    println(hanako.age)
}

コンストラクタ

// パラメータによってコンストラクタ指定
class Rational(val numerator: Int, val denominator: Int) {
    // セカンダリコンストラクタ
    constructor(numerator: Int): this(numerator, 1)
}

イニシャライザ

インスタンス生成の際の処理を定義

class Rational(val numerator: Int, val denominator: Int = 1) {
    init {
        // 初期化時、条件に合わなければ例外スロー
        require(denominator != 0)
    }
}

継承

継承元にはopenをつける、overrideするのにはoverrideってかく
openをつけないとoverrideできない

open class Person(open val name: String) {
    open fun introductMyself() {
        println("I am $name.")
    }
}

class Student(override val name: String, val id: Long) : Person(name){
    override fun introductMyself() {
        println("I am $name(id=$id)")
        // 継承元呼び出し
        super.introductMyself()
    }
}

今の所の感想

オブジェクト指向の基本的な考え方はJavaと同じ感じでだいぶわかりやすい

Kotlinスタートブック

Kotlinスタートブック