Coffee Break Script

モフモフしててニャーと鳴く気まぐれな生き物が好きです。情報を物理で工学するのが専門らしい。

TeXに行番号をつけるTips

久しぶりの更新ですね。

ところでみなさん、論文やレポートは何で書いてるんでしょうか。

Wordでしょうか? マカーはPagesとか使う人もいそうですね。

そういう人はこの記事を読まないでください。

さ、というわけで()TeXのTips紹介です。

共著者に論文をチェックしてもらったり、ジャーナルに投稿して査読してもらう段階(final camera ready原稿ではない段階)では、論文に行番号を入れて「何行目のここが〜」とかチェック/議論しやすくしておく、というのがデキる投稿者の気遣いらしいです。

TeXのよくあるディストリビューション(奥村先生の美文書本の付属CDとか)を入れている人は、おそらくlineno.styというパッケージが入っているはずで、これを使えば基本的にOK。

しかし、数式の入った段落では不具合が生じるらしく(追記参照)、プリアンブルにおまじないが必要になるとのこと。 ということで、

% line numbers
\usepackage{lineno}
\newcommand*\patchAmsMathEnvironmentForLineno[1]{
  \expandafter\let\csname old#1\expandafter\endcsname\csname #1\endcsname
  \expandafter\let\csname oldend#1\expandafter\endcsname\csname end#1\endcsname
  \renewenvironment{#1}
     {\linenomath\csname old#1\endcsname}
     {\csname oldend#1\endcsname\endlinenomath}}
\newcommand*\patchBothAmsMathEnvironmentsForLineno[1]{
  \patchAmsMathEnvironmentForLineno{#1}
  \patchAmsMathEnvironmentForLineno{#1*}}
\AtBeginDocument{
\patchBothAmsMathEnvironmentsForLineno{equation}
\patchBothAmsMathEnvironmentsForLineno{align}
\patchBothAmsMathEnvironmentsForLineno{flalign}
\patchBothAmsMathEnvironmentsForLineno{alignat}
\patchBothAmsMathEnvironmentsForLineno{gather}
\patchBothAmsMathEnvironmentsForLineno{multline}
}
\linenumbers

をプリアンブルにコピペしましょう。こうすれば万事解決です。

ではでは。

■追記(2018/5/23)

不都合というのは「数式に行番号が振られない」ということです。通常は数式には別途数式番号が振られているはずなので、地の文はlineo.styによって振った行番号、数式は数式番号をそれぞれ使えば指示箇所を一意に定めることができるはずです。

ですので、特に不都合ではないよという人は下記のようにシンプルなプリアンブルで事足ります。

% line numbers
\usepackage{lineno}
\linenumbers

追記以上。

wing 37

今日はガッツリ内輪の話。 wingとかtsubasaでピンとくる人にしか伝わらないことです。

今年のwingでは、運営にはほぼまったく関与せず、3日目の途中からお手伝い・雑用・ドライバーという形で参加しました。 数年前の参加者だった子たちが運営側で戻っているという、その時点ですでに嬉しい回だったわけだけど、自分にとってもtsubasa歴ちょうど10年目という節目のwingだったので、そこに多少なりとも関われたというのは、また別の感動がありました。

さて、運営状況については…多少、というか直前になるまでバタバタしていて、細かいところまでフォローされてなかったなぁという感じなのですが。それについて、実行委員長のおっさんから「お前からビシッと言ってくれ、俺は怒るだけの体力がもうない」とかいう卑怯で姑息な圧力がかかったので、泣いて馬謖を斬る思いで、スタッフの子に小言を言いました。

でも、例年よりもスタッフ陣がピンピンしていて、夜ゼミに参加したりと楽しんでいたのが印象的でした。あれはかなりいいと思います。というか、「当日は重要項目を再確認・再点検するだけでもうほとんど準備することがなく、スタッフ陣も班長たち並みにふらっと講義とか夜ゼミに参加しにいける」っていうのが理想だと思うんです。 そういう意味では、今回のスタッフの雰囲気はなかなかいいものだったと(外野から見ている限りは)思いました。

ということで、やっと雑感を書くことができました。 もう1ヶ月以上、優に過ぎているけど。

来年のwing38の運営陣募集もかかりましたね。 wing40くらいまではなんとか続くといいけどなぁ。

「Pythonからはじめる数学入門」買ってみた

スペイン語の入門書を探していたのに、いつの間にかPython本を買っていました。 どうもosaKBです。

その名も Pythonからはじめる数学入門

Pythonからはじめる数学入門

Pythonからはじめる数学入門

純粋なオライリー本ではなく、オライリー・ジャパンが独自に日本語訳版を出版してくれています。 こういう本はあまり見ないので感謝ですね。

ざっと目次だけ紹介すると、

  1. 数を扱う
  2. データをグラフで可視化する
  3. データを統計量で記述する
  4. SymPyで代数と式を計算する
  5. 集合と確率を操作する
  6. 幾何図形とフラクタルを描画する
  7. 初等解析問題を解く

となっています。 普段Pythonを使う時はNumpyばっかりでSymPyはほとんど使わないし、そういう状況ではだいたいMathematicaを使ってしまうので←

これを機に勉強してみよう、と。

せっかくなので、章末問題を解いたらここにアップしていこうかな、とか思ったり思わなかったり。

ざっと目を通した感じ、ほとんどがインタラクティブシェル(Python対話型シェル・IDLE)を例に説明されているので、あまり慣れていない人にも取り組みやすいと思います。 (個人的には、JetBrains社のPyCarmかIntelliJ IDEAの使用をオススメします。まじでいいよ。)

AlphaGoの弱点

巷を賑わせているAlphaGo(アルファ碁)。

 

僕は機械学習とは少し方向性の違う「脳型計算」の従兄弟みたいな分野の研究を

ちょうど今やっているところなので、深層学習とかこの手の話題はよく耳にする。

 

今はどこの業界も「猫も杓子もディープラーニング」状態、

ある人は

まるでティーンエイジャーのセックスのようだ 何がいいのか分からないけど、周りがみんなやってるらしいし自分もやっとくか」

 と評したとかしないとか。(どっかのSlideShareで見かけた気がするんだよね)

 

たしかに目覚ましい成長を遂げていて、確実に成果を挙げている技術なので当然と言えば当然なのだけど、あまり批判的な意見に触れることがない。

……ので、今日は少しネガティブな話をしてみるとしよう。

 

分かりやすいのでAlphaGoを対象にして話していく。

まず、こいつの弱点はシンプルに、

  1. データがなければ何も始まらないこと
  2. イレギュラーに弱いこと
  3. 囲碁しか打てないこと

の3つ。

 

### 神は「教師データよあれ」と言われた

 

AlphaGoについてはもう散々記事が書かれているので詳しく説明する気はないが、

「大量の棋譜を読み込むことで様々な戦略を学習していった」

というのは前提知識にしてもいいと思う。有名な話だよね。うん。

 

機械学習では、こういう風にお手本となるデータを大量に入力することで、最適な選択肢を取るようにトレーニングする。これを「教師あり学習」と呼ぶ。

世の中には「教師なし学習」というものもあるけれど、「これが正解です」と明示的に教えないだけで、結局大量のデータを入力するプロセスは不可欠である。

 

つまり、ざっくらばらんに言えば、

機械学習を使うと「1を聞いて10を知る」ようなシステムを構築することができるけど、それには「1億の関連データを前もって教えておく」必要がある

ということだ。

 

しかも、この「事前入力データ(教師データ)」の質が性能を左右する。

たとえば、AlphaGoに初心者とか素人の棋譜を大量に入れても、プロ棋士に勝てるようになるには、プロの棋譜を使うときの数倍のデータが必要になってくるだろう。

 

だから、キリスト教の神が万物を創造するときに「光あれ」と言葉を用いたように、機械学習で優秀な人工知能を創造したければアダムが「良質なデータあれ」と唱えて用意してやらなければならない。

入力データ選定段階では、確実に人間の知恵(少なくとも現時点では)が関与していないと成立してくれない技術なのである。

 

これが弱点の1つ目。

 

 

### 打たれ弱さ

 

AlphaGoと対局したイ・セドル九段のインタビューをまず見てみよう。

 

記者会見の冒頭、イ・セドル9段は「今回の勝利は非常に大きな価値がある。世界の何ものにも代えがたい」と笑顔で喜びを語った。さらに、記者の質問に対し、これまでの対局を通してアルファ碁の弱点を二つ発見したことを明らかにした。一つ目は、黒(先手)で打つときのほうが、白(後手)よりも苦手なこと。二つ目は思いがけない手に、ミスというほどではないが、それまでに比べわずかに劣った対応をすること。後者について「バグではないか」という。

引用元 : 囲碁AIにイ・セドル9段が初勝利、プログラムの弱点見破った?

 

実際、囲碁を知る人から見ると明らかに凡ミスのような変な手を打っていたらしい。

基本的には線形なシステムだし、最適解ではない解(ローカルミニマム)に落ち込んでしまうということが考えられる。ま、要はイレギュラーに弱い、ということですね。 

 

これが弱点2つ目。

 

 

### 専門バカ

当たり前だけど、AlphaGoは将棋は指せない。

囲碁しか打てない。

しかも、絵を描きながら囲碁を打つとか、ミステリー小説を読みながら囲碁を打つとか、そんな芸当もできない。

 

つまり、与えられたタスクしか、あらかじめ決められた範疇でしか仕事をこなさない。

課題を自分から見つけてくる、とか、そういうこともない。

 

たとえば、なんだろうね。

囲碁を打ってて気がついたんですけど、別に碁石って白黒じゃなくてもよくないですか?もっとカラフルなやつがあったり、ガラスでできてる碁盤だったり、デザイン重視の物もあっていい気がするんですよね。インテリアとしても売れそうじゃないですか?」

みたいな提案(あるいはジョーク)を、AlphaGoはできない。

 

これは「境界問題」と言うのだが、現在の技術では「想定する範囲」を限定してあげないとプログラムが組めないのである。(もしくは、プログラム自体は組めても実用にならないくらい膨大な演算が必要になって、実質できないのと同じ。)

 

これが弱点の3つ目。

 

 

## 機械学習の本質はアルゴリズムの「抽出」に過ぎない。

 

ということで、まとめ。

機械学習すげーぜ、ともてはやされているけど、実は弱点もあるんだよ」

ということがほんのり伝わっていたらOKです。

 

で、じゃぁなんでそんな弱点が残っちゃってるの?と。

それも人工知能で補完してどうにかできちゃうんでしょ?みたいなそこのあなた。

 

いやいや、ちがうんですよ。

機械学習というのは、本質的に、アルゴリズムの「抽出」を自動化しただけなんです。

それだけでも画期的な成果を挙げていることは疑いようのない事実だけど、べつに人工知能アルゴリズムを「創造」しているわけではない。

 

過去から現在に至るまでにに蓄えられたありとあらゆるデータから、人間の指示で求められているものに見合った何かしらを抽出しているだけ。

 

だから、そこをもう一歩乗り越えて、「一度の経験(イベント)で、枝葉末節、下手したら全然関係ないことまで、ありとあらゆることに関する経験値を得る」ような人工知能を作らない限り、シンギュラリティはまだ来ないんじゃないか、と思うわけです。

 

最後に、多少批判的な文を書いてきましたけど、機械学習の技術はすごく面白いし、数学的にも綺麗な構造をもっているものが多いので、個人的に否定的な意見をもっているというわけではないです。

 

むしろ、すべての地球人がさっさと人工知能に仕事を奪われて、何もしなくたって生きていける桃源郷みたいな世の中になればいいと思ってるくらいです。

あ、今度その話も書きましょうかねぇ。

ファースト ドリップ

はじめまして。

ブログを開設してみました。 身元がバレバレの(隠す気もあまりない)twitterアカウント ( @osaKB ) と紐付けられたブログです。

書く内容はと言えば、「140字じゃ足りねぇや」というものでしょうかね。

ツイッターの補足的な?

まぁ、基本的に面倒くさがりでアタマが空っぽな人間なのでね。

研究対象のこと以外で何日も何週間もジィーっと考えを煮詰めたりとか、そういうことは無理なんで。 ましてや、政治的な、高尚な議論なんてするつもりもないし、わざわざネットで書き散らす性格じゃないんで。 飲みながらあれやこれや話して、次の日になったら「なんの話で盛り上がってたっけ」みたいな程度の、ね。

まぁ、自分の特徴としては、「小中高大+大学院=20年」も学校に通っているというのがあるので、必然的にそちら系の、「教育」とか「勉強・学習」とかの話題が多くなるような気がします。

なんとなぁ〜く。

特に、かれこれ7, 8年ほど家庭教師をしているので、そこで得たノウハウとかを書こうかな。

だんだん自分の研究がメインになってきて、前みたいに何人も掛け持ちしてバリバリ教えるということをしなくなっているんだけど、これまでに自分が教わってきたことはもちろん、自分なりに工夫してきたことにも、どこかのサーバーに負荷をかけるだけの価値はあるかと思えるので。

あまりかしこまった感じにならないように。

ゆる〜くゆる〜く、コーディングの合間、コーヒー片手に息抜きで書くような。

そんなスタイルで続けていければいいなぁと。

というわけで、"Coffee Break Script"ってわけです。

ではでは、どうぞよろしく。