TIM Labs

2016年6月アーカイブ

ICT教育というのがいろいろ騒がれている。そして、2020年から小学校でも電子教科書が導入されることに決まった。さらに、小学校からプログラミング教育をと騒いでいる。

ということもあり、ちょっとPythonのe-learnig事情について調べてみた。
とりあえず日本は無視して、世界の状況を知るべく、英語で無償で勉強できるところを探してみたら、余りあり過ぎて手に負えない。
MOOCやCouseraだけでも多数の大学が講義を提供してる。また、python.orgから辿れるのもあったり、Google's Python Classもある。とにかく、きりが無いのだ。

それで、機能が充実しているらしきPythonのe-learningの1つ、http://interactivepython.org を調べてみた。
登録しなくても勉強はできるのだが、練習問題で作ったプログラムを記憶してもらったりするには登録が必要なので、登録して試しつつあるところだ。

いくつかコースがあるのだが、とりあえず、How to Think Like a Computer Scientist: Interactive Editionを始めてみた。これをやると、コンピュータサイエンティストのように考えられるようになる、という謳い文句である。
テキストは、とてもインタラクティブになっている。既存の、紙や講義形式を単にe-learningにしたものではない。

たとえば、例題は雛形のプログラムが用意されていて、そのPythonのプログラムをブラウザ上で追加変更して走らすことができる。エラーも出れば、デバッガでステップ動作などもできるし、グラフィックスも可能だ。どのくらいの人がその問題を解いたかなども示してくれる。前の問題をさらに変更するという課題も多いので、セーブできていないと面倒である。

分量は、分厚い入門書1冊分くらいあり、書き方は非常に丁寧だ。練習問題は、n択と、実際にプログラムを作るのと両方があり、プログラムの課題も多く、真面目に作ると、それなりに時間がかかる。

このサイトは、高校や大学レベルの教育を提供することが目的のようである。実際、すごく丁寧な作りだ。
e-learningの世界でも、日本は箱物にばかり走っているが、一番大切なのはコンテンツである。
圧倒的なコンテンツを用意できるかどうか、それが問題なのだ。

e-learningを利用すれば、無料で、世界のいろいろな学習教材が選びたい放題である。ただ必要なのは、英語力であろうか。でも、このコースでPythonを学習するのに必要な英語力は、中学英語で十分過ぎる。各セクションのはじめに、ビデオが用意されていて、そのセクションの説明を、テキストに沿って説明してくれるが、それを聞き取れなくても、その後に書かれていることとほぼ同じなので気にするうことはなく、無視して大丈夫だ。それより、このような長大な英語でのe-learningをやれば、知らない間に英語力も身についてしまうのではないかと思う。

最後に、プログラムの実行状況を確かめるために、永久ループするプログラムを書いて[Run]ボタンを押した。
着々とprint出力が長くなって、そのうちブラウザが反応しなくなった。
止めようと思ったが、[Stop]ボタンがついていなかった。
でも、しばらくすると、ブラウザに叱られて、プログラムは強制終了になって、無事だった。こういうのを無事と言うのかな?

このところ、人工知能がブレークしまくっている。書店には、人工知能あるいは人工知能関連の専門用語をタイトルに入れた書籍が溢れている。こんなに本が増えると、どれを読むか選ぶだけでも大変である。

そんな中、人工知能学会から『人工知能とは』という本が出た。人工知能学会監修ということで、この本を読めば人工知能についてしっかり理解できるかもと思わせる。
表紙には、鉄腕アトムとその仲間たちが描かれており、とても易しい本に見える。

この本、非常に売れているようである。何しろ、販売前に予約だけで売り切れて、増刷したほどである。

人工知能とは.jpg『人工知能とは』監修:人工知能学会、編集:松尾 豊、著者:多数、出版:近代科学社

元々は、人工知能学会の学会誌の連載で、単行本化に際して人工知能学会員だけでなく、一般の人も対象に加えるため、加筆修正したようである。

この本は、現在人工知能の様々な分野で活躍しているトップ研究者13名が、自分がやっている人工知能研究についてあれこれ説明している本である。コンピュータ上だけでやっている人もいれば、ロボットなどを使っている人もいるし、脳科学の成果などを生かそうとしている人や、地球の生命の脳とは無関係な人工脳をつくろうとか、様々な立場から書かれている。

一言で言えば、ぜんぜん意見にまとまりが無い本なのである。というか、人工知能とは、そもそもそういう世界であり、今も混沌として、カオスのような状態である。今まで何度かの人工知能ブームがあったが、これまでは成果らしい成果、人間の能力を超えるような成果が出なかったのだが、今回は、たとえば囲碁のアルファ碁のように、トッププロを負かすような成果が出始めているところが違う。

「人工知能とは?」という質問に対して、決まった答え、定義などないというのが、この本の主張であろう。実用的な知識、理解が何か得られるかと思って本書を読むと撃沈するであろう。でも、人工知能が将来どのような影響を与えるかについて、いろいろ煽っている本はあるのだが、冷静に考えてみるには本書はとても良い。形而上学的な部分もあって、かなり読みにくいかもしれないが、こういうレベル、特に最先端の研究者が何を考えているかを知ることは有用である。

実際に人工知能をいじるには、ちゃんとプログラムを組んだり、ツールを使ったりしなければいけない。技術者・経営者の多くは、そういう本を求めていると思うが、人工知能が近い将来社会に影響を与えることが確実になって、人工知能と倫理問題とか考えるには、「そもそも人工知能とは何か?」という根源的なことを考えないといけない。


ちょっとNumpyで、浮動小数点数をaroundを使って丸めてみよう。

以下のようにして、0.5から1刻みで10個のちょうど中間になる値を用意した。 そして、np.aroundを用いて、一気に丸めてみた。
In [182]: np.arange((10))+0.5
Out[182]: array([ 0.5,  1.5,  2.5,  3.5,  4.5,  5.5,  6.5,  7.5,  8.5,  9.5])

In [183]: np.around(np.arange((10))+0.5)
Out[183]: array([  0.,   2.,   2.,   4.,   4.,   6.,   6.,   8.,   8.,  10.])
すると、
array([  1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.])
になると思ったが、違った。 ここで、さらに、Python3 の丸め roundでも試してみた。
In [188]: round(2.5)
Out[188]: 2

In [189]: round(3.5)
Out[189]: 4

In [190]: round(4.5)
Out[190]: 4

In [191]: round(5.5)
Out[191]: 6
つまり、小数部が .5 の場合、切り上げまたは切り捨てのいずれかをするのではなくて、偶数にしてしまうのだ。実際、マニュアルにもそう書かれている。 確かに、この場合、問題になることは少ないから、これでもいいとは思うが、もうちょっとちゃんと調べてみた。

浮動小数点数をどのように処理するかについては、IEEE 754(IEEE 浮動小数点数演算標準)で詳しく規定されていて、ハードウェアレベルで実装されていることが多い。 この中では、丸めは最近接偶数への丸めが推奨されている。小数部が.5になったとき、つねに切り上げ、または切り下げを行っていると値に偏りが出てくるという考え方である。これを無くする、軽減するには、小数部が0.5のとき、1/2の確率で切り上げと切り下げになると都合が良い。そういう考え方で、この方法が最近は増えているようなのだ。

この丸め方を、偶数丸め、五捨五入とか、銀行丸めというのだそうだ。
銀行の場合、円以下の処理方法によって、処理件数が多ければかなり影響が出るかな。

この問題、Python, Numpyだけの問題ではなく、あらゆるプログラミング言語でroundをするとき発生する問題である。
これからは、roundは、小数部が0.5のとき切り上げされるとは限らないので、どう処理されても困らないように書いておこう。
細かい問題だけれど、気が付かないとハマってしまいそうだ。

このアーカイブについて

このページには、2016年6月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2016年5月です。

次のアーカイブは2016年7月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。