ysaz (ImanazaS) blog

最近はデータ分析や機械学習が中心。たまに音楽や書評。

人工知能ブームを捉えてみる

最近、やたらとAI、人工知能というキーワードが流行っており、ニュース記事や雑誌でもその文字を目にすることが多くなっている。まさにブーム。専門家の方々によると、今のブームは第三次ブームということらしい。僕は人工知能の研究者でもなんでもないが、近い将来、ますます人の生活に入り込み、多大な影響を及ぼすであろうこの分野の動向を捉えたいという動機から、文献や各種記事に目を通すようにしている。

さて、第三次ブームを牽引しているのはディープラーニング(深層学習)という技術である。この技術が登場して以来、画像や音声認識精度の目覚ましい向上が見られ、Facebookにアップされた写真から自動で顔が認識されることや、Googleの翻訳サービスが海外旅行や出張でもある程度使えるレベルにまでパワーアップしていることなど、身近なサービスを通じてディープラーニングが広く浸透してきていることが感じられる。
また、一年ほど前であるが、Google DeepMindの開発したAlphaGoが囲碁の世界チャンピオンを倒したことも象徴的な出来事であった。囲碁AIの勝利はディープラーニングの汎用性を示すとともに、「コンピュータ vs 人間」の構図の中で、しばらくは人間に追いつけないであろうと言われていた領域にコンピュータが一気に侵略してきた、という印象を与え、人工知能の新たな時代の到来がメディアを伝じて一斉に世間へ広まることとなった。

シンギュラリティ(技術的特異点)という言葉も聞く機会が増えているが、機械がほんの僅かでも人間の知能を超えるような状態に達すれば、自ら学習し続けることで、人間が追いつけない領域へ入っていってしまうことが懸念されている。これに対しては賛否両論様々な意見があり、機械の暴走を危惧する声や、特定の分野はありうるとしても、あらゆる分野で人間を超えることはない、などの声が挙がっている。

一方で、5年ほど前にブームとなったスマートにはじまり、ビッグデータ、IoT、AIと、進歩している技術をメディアは一緒くたに扱いがちなことが多い。そのために、実は以前からある技術・商品なのに「AI家電」として新たに紹介されることがあるなど、新たなラベルで焼き増しされているだけの技術に気をつける必要がある。たとえば、生活家電がネットワークにつながり、センサーがデータを提供したり制御したりということは以前から存在していたが、ディープラーニングの出現によって大きく変わったことがあるかと聞かれても、特段そのようなことはないように思われる。
広義の人工知能は非常に汎用性が高いため、良いように使われがちだが、メディアの作り出すブームに惑わされすぎないよう、しっかりと本質を見極める必要がある。

プログラミングを学ぶ上で心がけるべきこと

多少入門書を読んだり、CourseraをはじめとするMOOC (Massive Open Online Course) を履修したりして学んではきたが、ここでは、プログラミング(python)初心者として読んでよかった本・受講してよかったコースの紹介ではなく、僕が重要だと感じた心構えや意識といった観点から、記事を綴っていきたい。

共に学ぶ仲間の存在を感じること

プログラミングに限らず何か新しいことを始める上で重要だと思うのは、自分と似たような立場で同じように取り組んでいる人の存在を知り、刺激を受けることだと思う。自分の場合は大学院の講義がそれにあたり、宿題の締切があるからきちんと取り組むという姿勢が保てたし、わからないことがあれば経験値の高い他の学生や教授に質問して、教えてもらっていた。

ただし、こういうふうに書くと、教室における対面授業が最も有効で手っ取り早い手段のようにも聞こえるが、必ずしもそうではない。なぜなら、自分が受講した上記の講義は、機械学習の理論的な部分が主であり、Rとpythonの使い方については触りの部分を少しやっただけであったため、講義を最後まで履修することには価値があるが、そこで満足してそこから継続して学びを続けたり発展的な学習をしない限り、本当の意味での知識やスキルは定着していかないのだと思う。
逆にMOOCなどのオンライン講座を受講する形であっても、Forumを活用して他の受講者に質問したり回答を返したりすることで仲間の存在を感じることができるし、その気になれば形式は何だっていいと思う。ちなみにオンライン講座の利点として僕が感じていることの中には、対面と違って期中での受講開始が可能であることや、講義を受けるにあたって場所や時間を選ばないこと、最新・最先端の知識を学べることなどがある。

実際に手を動かしてみること

Googleで「python 入門」と検索すると非常にたくさんの結果が返って来て、pythonの使い方を紹介してくださっている様々なBlogや個人ページにたどり着くことができる。しかもその多くを無料で閲覧することができるため、非常にありがたいことに、情報は取ろうと思えばいくらでも簡単に入手可能である。しかし、与えられた情報をただ漠然と眺めていても何も身につかない。もちろん優れたコードを読み参考にすることで、より簡潔で美しいコードが書けるようになるかもしれないが、それ以前に重要なのは、人の書いたコードを真似るだけでもいいから、実際にコードを自分で書いてみて、コンピュータ上で動かし、何が起こるのかを自分の目で確かめることだ。これはスポーツをすることや楽器を演奏することと同じで、よほど特異な才能でもない限り、ギターの譜面をじっと眺めただけで、初心者がいきなりギターを演奏できるようにはならない。譜面を追いかけながら一つ一つ音を鳴らし、体に覚え込ませることで、上達していくものである。

次に、人の書いたものを真似することの有効性について、「新しいアイデアは既存要素の組み合わせによって実現される」というジェームス・ヤングの言葉を踏まえて考えてみる。新しいアルゴリズムやプログラミングにより実現される新たなサービスは、既存のコードを新しく組み直したものにすぎない、とも言えるため、人が書いたものを真似してどんどん試し、「こう入力すればこんなアウトプットが出る」という経験をたくさんストックしておくことは、非常に有用なことである。必要に応じて引き出しを開けて組み合わせていくことで、新しい価値を生み出すことができる。このとき、必ずしもコードをすべて記憶しておく必要はないと思う。こういうことをする場合にはあの本を参照すればいいとか、Stack overflowのあの回答に書いてあったなとか、必要な情報にすぐにアクセスできるようにさえしておけば事が足りるんじゃないかと感じている。

アイデアのつくり方

アイデアのつくり方

30才から向き合うプログラミング

プログラミングを学ぶことを通じて論理的思考が鍛えられたり、問題解決力が身についたりと、現代社会において、プログラミングは英語と並ぶくらい有用なスキルとして注目されている。当然早くからスタートするほうがより定着するだろうということで、プログラミング教育を取り入れる小学校が増えていたり、習い事の一つとしてプログラミングを組み入れる親が増えているなど、子どもの頃からプログラミングに触れられるような機会が広がっているように思う。

今回の記事では、プログラミング(主にpython)を始めたきっかけと、pythonに出会うまでの自分とプログラミングとの接点について、簡単に振り返ってみたい。

 

 

30才からのプログラミング

一方、私がプログラミングを学び始めたのは30才を過ぎ、31に差し掛かってきた頃。留学先の大学院でデータサイエンスの授業を履修したことがきっかけで、Rとpythonに出会った。それまでにもStataを使ったデータ分析はやったことはあったが、いわゆるプログラミング言語に興味を持ち始めてから学ぶのはこのときからである。

当時、データサイエンスという言葉がバズワードのように取り上げられていて、「データサイエンティストは21世紀最もセクシーな職業」とも言われていた。

hbr.org

 

また、RStudioというIDEの扱いやすさや、機械学習系のパッケージが充実しているということなどからR言語がもてはやされていた時代でもあったが、ipython notebook(現jupyter notebook)の使い勝手の良さに触れたり、たまたま参加したKaggleのコンペで、Rでは処理できないほどの行数をもつデータセットを扱ったりしたこと、webアプリづくりにも適していたりすることがきっかけで、pythonをメインに学習するようになった。

どちらが良いというわけでもないが、昨今取り沙汰されているDeep Learningのフレームワークpythonを中心に数多く存在していることを鑑みると、pythonをメインにしていて良かった気もする。

 

過去の自分とプログラミングとの接点

思い返せばそれよりもずっと前にプログラミングとの接点はあったはずだが、どちらかという苦手なほうだった。記憶にある限り最初に触れたのは中学校の技術の授業。何をやったかはっきりと覚えていないが、簡単な野球ゲームのようなものを作ったような気がする。当時からパソコンを触るのは好きだったが、直感的な操作が可能なインターフェースを持つアプリケーションを好む一方で、真っ黒な画面に白色の字を一行ずつ打ち込んでいき、動作を一つ一つ確認していくという作業はかったるかったように思う。

 その次にプログラミングに触れたのは大学一回生のときで、必修の授業の中でFortranを学んだ。簡単な計算処理から分子軌道計算の触りまでをやったような気がするが、得意だと感じることもなければ、のめり込むようなこともなかった。そもそも私のいた学科は化学系であり、汗水垂らして化学実験に没頭することが醍醐味という雰囲気があったため、机上のシミュレーションはそれほど人気もなく、教育カリキュラム的にもあまり重視されているように思えなかった。

 

なぜそれまで、プログラミングは自分を惹きつけるものではなかったのか?

これまで振り返ってきたように、大学を卒業するまでに触れたプログラミングに対する印象は大して記憶に残らないようなものであったが、それはプログラミングがどんな形で活用されているのか、実態を把握することができなかったからのように思われる。それはプログラミングだけでなく数学や哲学のような抽象的な学問に対しても言えることで、「有機化学の技術によって合成された化合物が新薬の成分として使われている」、という具体的な事例を聞くと、化学が世の中でどんなふうに役に立っているかをそれなりにイメージできるのに対し、「相対性理論や三角測量がGPSの技術として使われている」と言われても、目に見えないのでピンとこない。このようにプログラミングは、身の回りの生活において実態がなく、ブラックボックス化されていて特に知らなくても問題ないという存在であったため、惹きつけるような魅力を感じさせないものであったように思う。

 

プログラミングは実社会において有用か?

そんな自分のプログラミングに対する印象が少し変わったのは、社会人になって経験したことがきっかけである。大量のテキストファイル(csvファイル)をエクセルで扱うにあたり、VBAを用いたマクロ処理に業務を通じて触れたことで、人がチマチマと時間をかけておこなっていた手作業が、ボタン一つで簡単に自動化できてしまうという便利さを実感することができた。

これ以外にも、例えばBlogの見栄えをよくするのにhtmlが一役買っているとか、いろんなアプリケーションを動かしているのはJavaだとか、色んなことを見聞きするようになり、プログラミングに対する興味は少しずつ高まってはいた。

しかし、VBAのコードも先輩が書いたものやインターネットで見つけてきたものを適当に切った張ったして使っていた程度の知識しかなく、自分で書くにはハードルが高そうだし、自分のなかでは英語などに比べて勉強するインセンティブも優先順位もそれほど高くないと捉えていたため、それっきりであった。

 

新しいことを始めるのに遅すぎることはない

VBAを少しかじったものの、そこから特に進展することもなく4年ほどが過ぎた頃、冒頭で述べたようにpythonに出会った。「何か新しいことを身につけたい!」と思っていた時期だったので、自分としては良いタイミングだったと捉えている。

次回の投稿では、微力ながら、これまでどうやってpythonを学んできたか、どんなことを心がけているかについて、まとめてみたい。

日本でのタトゥー(入れ墨)の是非

海外(アメリカやオーストラリア)で暮らしていると、腕や脚からタトゥー丸出しな人たちをよく見かける。

子どもをよく連れて行く公営の温水プールでも、タトゥーを隠すことなく水着を身につけ、子どもと楽しそうに遊んでいる親御さんというのはごく自然だ。

(ただし、ちゃんとした統計データによる裏付けがあるわけではないですが、割合としては所謂ブルーカラーの労働者が多数で、ホワイトカラーの人は少ない。)

 

僕はタトゥーなり入れ墨をしていないので、こうした人たちは自分とは違うな、と思うものの、特に怖いだとか、避けようとは考えない。

一方で、日本国内ではまだまだタトゥーや入れ墨に対する偏見や否定的な意見が多いようだが、なぜなのだろうか?身近な例として、タトゥーや入れ墨をしている人の入浴を禁止する大衆浴場が多いのはなぜなのか?

 

1年ほど前に実施されたヤフーの自主調査によると、全面禁止という意見が最も多く、46%もの人が投票している。この1年で議論が大きく進んでいるように見えないので、おそらく今調査したとしても同じような結果になると思われる。

 

polls.dailynews.yahoo.co.jp

 

すべてを読んだわけではないが、禁止すべきという人のコメントを読んでいると、「犯罪人の証拠」だとか、「反社会的勢力の象徴」だとか、そういった偏見から来る抵抗感を理由に挙げている方が多い。

これまでの日本での長い歴史の中で育った文化(メディアやエンターテイメントを含む)が作り上げてきたイメージなんで、そういったイメージを持っている(持ってしまった)人たちを非難することはできないし、視野を広げてもっと違う視点で捉えるべきとか偉そうなことを言うつもりはない。

 

ただ、せっかく遠路はるばる日本を訪れた旅行客が、日本の文化を楽しみたいのにタトゥーが入っているという理由だけで門前払いされてしまうのはいかがなものかと思う。

年末に日本へ一時帰国した際、初めてお台場の大江戸温泉物語へ行ってきたのだが、想像以上に外国人観光客で賑わっていて驚いた。外国人といってもその多くがアジア諸国の人たちなので、タトゥーや入れ墨が議論になる西洋の方々とは対象が異なるかもしれない。

それでも、多くのオーストラリア人がスキーやスノーボードをするために日本へ旅行しているし、そうした観光地の近くには温泉があるケースも多いため、冒頭で述べたとおりタトゥー人口の高いオーストラリアからの旅行客をもてなすには、入浴条件の緩和はとても重要なんじゃないかと思う。

 

別にタトゥーや入れ墨をした人が横にいたからといって突然殴られるといったことは起きないし、インクがお湯に染みだして不衛生につながるなんてこともない。

どうしても不快を示す人がいるのを気にするのであれば、ラッシュガードを含む水着着用で入れる入浴施設にすればいい。それもアイスランドブルーラグーンのような広大で混浴の施設にする。まあ、水着着用を持ちだすと、「風情を損なう」、「温泉本来の価値が薄れる」など、別の議論に発展しそうなので、ここではこれ以上触れないこととする。

 

とりあえずは、東京オリンピックまでに、先に挙げた大江戸温泉物語ラクーアなど、主要な温浴施設が旗を振って、タトゥーや入れ墨解禁を仕掛けてくれることを期待。

ChromebookへUbuntu Linuxをインストールする

前回の記事でChromebook導入の経緯と、現在までの使用感についてまとめてみた。

 

nami3373.hatenablog.com

 

今回は、これまで何度か手こずってきた、Ubuntuをインストールして動かすところまでの作業を振り返ってみる。

大まかに、作業としてやることは次の4つのステップ。

 

デベロッパーモードへの切り替え

escとリフレッシュ(F3に該当)を押しながら電源ボタンを押すと、まず「レスキューモード」として立ち上がる。

画面が切り替わったらctrlとdを同時に押すことで、「デベロッパーモード」として起動することができる。

レスキューモードではでかでかと警告マークが表示されるため、多少の事前知識があったとしても焦ってしまうが、落ち着いてctrl + dで対処する。

なお、デベロッパーモードの扱いで気をつけないといけないのが再起動時のオペレーション。完全に電源を落とし再度Chromebookを立ち上げるとレスキューモードの画面が出てくるのだが、ここで何も考えずにenterキーを押してしまうと通常モードで立ち上がってしまう。この際、デベロッパーモードで保存していた全データ(Ubuntu環境含む)が削除されてしまうため、細心の注意が必要。

筆者も、バッテリーが切れてしまったChromebookを立ち上げる際に誤って通常モードに戻してしまい、再度長い時間をかけてUbuntu環境を入れなおした苦い経験がある。

 

ターミナルの起動

デベロッパーモードに入ると、Ctrl + Alt + Tでcroshターミナルを開いたあとにshellとタイプすることでUnixコマンドラインシェルが使えるようになる。こんな感じ。

 

 

Croutonのダウンロードとインストール

chromeで以下のURLへアクセスし、croutonのスクリプトをダウンロードする。初期設定の場合、Downloadsフォルダに保存される。

http://goo.gl/fd3zc

 

次に、先ほど立ち上げたコマンドラインシェルに戻り、以下のコマンドを入力してダウンロードおよびインストールを実行。

$ sudo sh -e ~/Downloads/crouton -r trusty -t xfce,keyboard,audio,extension,chrome -e

 

chroot環境での起動

一時間ほどでインストールが完了したら、以下のコマンドを入力することでchroot環境に入ることができる。

$ sudo enter-chroot

ここまで来ればLinux OSとしてpythonなどのプログラミング言語を操作することが可能となる。

pythonのパッケージインストールについての話はまた次の機会に。

 

なお、上記のコマンドではなく、sudo startxfce4と入力することで、xfce4が別アプリとして起動する。インターフェース含めchrome OSとは異なる環境で作業したい場合に有用な方法である。

 

最後に、今回の記事をまとめるにあたって参考にしたサイトを紹介。

www.howtogeek.com

 

qiita.com

Chromebookを導入して

Chromebookを手に入れて3ヶ月近く経ったが、重宝しておりとても良い買い物をしたと感じている。

 

購入した機種はこれ。

ちなみに実際に購入したのは日本ではなくアメリカのAmazon.comであり、ネイビーが欲しかったが、なぜかアメリカ国外への配送は対応していないとのことでホワイトにすることに。 

 

購入にあたっての経緯は、

・持ち運びが楽で、Macbook Proよりも軽く、電池持ちの長いセカンドマシンがほしい。
iPad miniも所有しているが、タブレット端末は文字入力するには物足りない。やはり物理的なキーボードを備えていたほうがいい。

Macbook AirSurfaceもちらっと頭をよぎったが、10万近くもお金をつぎ込むほどではない。

Chromebookはインターネット環境下でないと使い物にならないという声も聞くが、そもそもiPadMac, PCをオフラインで使う機会は少ないし、その部分がディスアドバンテージになるとは思えない。

といったところで、2万円ほどで手に入るなら多少失敗してもいいや、と割り切りって、以下のブログやAmazonのレビューを参考にASUSのC201にした。

 

www.migiyoko.com

 

決め手となったのは980gという軽量さと、13時間もつという長時間バッテリー。

日本への移動だけでなく、ちょっとした外出時に持ち歩くにはもってこいのスペックという判断。

 

実際に届いてから使い始めて、このスペックは期待通りだったし、起動の早さや設定のシンプルさもとても気に入っている。

さらにデベロッパーモードに入ればLinux環境を構築することができ、pythonを走らせられるので、メールやウェブブラウジング以外でもやれることが増えて嬉しい。

ただ、自分にとって使い勝手のいい状態にまで持っていくのが少し面倒で、何度かやり直すこともあったため、主にデータサイエンス向けのpython環境構築については、いずれこのブログの中でもまとめておきたいと思う。

諦める力

Amazonの「Kindle Unlimited」というサービス(所定の本、コミック、雑誌、洋書が読み放題)を無料体験中で、いろいろと漁っていたところ、元陸上選手の為末大さんが書いた「諦める力」という本に出会い、読んでみた。

 

 

納得できる部分も多く、読んでみてよかったと思うし、もっと若い頃、願わくば10代後半に出会っていたかったとも思う。

僕自身、決して器用な人間ではなく、何か秀でた才能があるわけではないため、昔から、「諦めずに努力を続けていればきっと報われる」と信じ込み、がむしゃらに頑張るフシがあった。

そのために、いくら努力しても敵わない相手や、どう頑張っても変えられないような状況に出くわすと、圧倒的な力の差を感じて挫折を味わう、ということが何度かあった。

その度に、「このままではダメだ」と自分の現状を見つめ、時には努力が足りないからだ、と自分を責め、またある時には他人とは違うやり方を取らなければ自分の存在意義はないのではないか、と苦悩してきた。

本書の『「オンリーワン」の落とし穴』という節の中で、「人間に優劣はないが、能力に優劣はある」という記述がある。この部分が特に響いたのだが、それは上記のような過去の経験の中でこのような割り切りが出来ていなかったために、自分と他人を比べ(優劣をつけ)、自分より優れていると思った人を羨ましがり、自身を卑下して悩んでいたからだと気付いたためである。

こうした理由から、自分らしさを見つけなければならないと自分を追い込んでいた10代後半〜20代前半(主に大学生の頃)の自分がこの本に出会い、決して逃げではない、前向きに諦めるという選択があるということに気付いていれば、もう少し楽に生きてこられたのかもしれない。

 

一方で、諦めるという選択肢が与えられたからといって、簡単に夢を追いかけることをやめてしまったり、やるべき努力を怠ってしまうことが奨励されるわけではない。

才能には優劣はあるが、あくまで相対的な尺度であり、絶対な指標というものはありえない。そのため、たまたま目の前に巨大な才能が現れたからといってすぐに諦める必要はなく、いろんな角度から自分を客観視し、どういう立ち居振る舞いをするのがベターか、よく考えるべきである。

また、別の見方をすると、成功するのはバカか天才のどちらかと言われるように、周囲からいくら反対されても信念を貫きやり遂げるバカが一定数いないことには、世の中は面白くならないんじゃないか、とも思う。そう考えると、本書が与えてくれた諦めるという考え方・選択肢は、天才ともバカとも分類できない僕のような人間が、のびのびと楽しい人生を送るためのきっかけとなるものなのかもしれない。