Brace, Paren, Semicolon.

受験勉強中

先週の振り返り

土日に旅行していて振り返りを書くタイミングが無かったので,1日遅れたけど書きますね。 前回のはこれ。

oimou.hateblo.jp

受験勉強

先週は確率関連の勉強が中心だった。

日がな一日演習問題を解き続けていたら,これまでの人生,確率関連の問題をほとんど雰囲気で解いてきていたことに気づいてしまった😱 そんな調子なので,問題を間違えても論理的に振り返りができない。これはマズイ…。苦手意識は無かったけど実は苦手科目だったみたい。

ということで,ひとつ問題を解いたあとの振り返りとして「わからないことは何か」「なぜこの解答は間違いなのか」明確化するようにして,ゆっくり取り組んだ。おかげで,論理的に解法フローを立てて解けるようになってきたと思う。

受験勉強以外

UnlimitedHand

UnlimitedPaint

もくもく会で作っていたものが動いてくれたので,ひとまずリポジトリを作った。

筋電義手関連

筋電義手関連で,本屋に行ったり論文を漁ったりした。

群論

群論はしばらく継続的に取り組めているのでよしよし。ところで受験勉強をしてるときにバーンサイド補題を使いたい機会があるけど,理解が甘いのかあんまり使いこなせてない…

シャノンのエントロピーの論文

シャノンのエントロピーの論文(A Mathematical Theory of Communication)を読んでいる。これは,ノートを1冊潰して論文を読む練習をしたい,という謎のモチベーションによるもの。一緒に測度論的確率論の勉強ができてとてもありがたい!

oimou.hateblo.jp

箱根

大学時代の同期5人で箱根旅行に行ってきた!受験に向かう不安とか話せたので良かった。

今週の振り返り

ツイートを頼りにざっくりと1週間を振り返る。

受験勉強

受験勉強の方は引き続き。

oimou.hateblo.jp

今週は中だるみしてモチベーション低下してしまっていたけど,あまり気負いすぎず少しずつでも進めていきたい。先は長い。

今はずっと数学をやっているけど,確率・統計のあたりに差し掛かったのでモチベーションが回復した。

息抜きに物理や漢文に少し手を付けてみたりもするけど,まだ一日の大半は数学。

受験勉強以外

受験勉強以外の時間は,とにかく自分の好きなことの勉強に時間を割くことにしている。

ひとつ注意しているのは,理論だけでなくてソフトウェアなりハードウェアなりモノをつくること。自分自身のモチベーション維持も兼ねて。

ツイートを頼りに振り返ってみると,今週は以下のキーワードを掘り下げていたらしい。

  • 生体刺激(筋電刺激)
  • 強化学習
  • バイオ・ケモインフォマティクス
  • R

生体刺激(筋電刺激)

不定期開催の Skype もくもく会がとても良い機会なので,UnlimitedHand に絡めながら周辺技術を色々勉強している。

ずっと食わず嫌いしてた R での可視化にも慣れてきた。やっぱり個人的に興味のあるデータを扱うのが一番楽しい。

強化学習

生体情報で機械学習をやりたくて,MRI 画像のデータセットを集めたりしてたけど,最終的には UnlimitedHand から取れるデータを使って強化学習で遊んでいた。Keras が便利。

ちょうど Cosyne という Computational Neuroscience 系の学会がツイッターで盛り上がっていたのもタイミングが良かった。

バイオ・ケモインフォマティクス

R で学ぶ統計力学とか面白そうなあと思いながらネットサーフィン(死語)してたら,バイオインフォマティクスの薄い本を見つけたのでかじってみた。

しかし R × 物理系の情報が少ないのはなんでかなあ。

R

食わず嫌いの ggplot を克服したのと,dplyr という超絶便利ライブラリを見つけたおかげで,クオリティオブ R ライフがかなり向上した。ちなみに dplyr は「デプリール」と読んでる。

ついでに,積読してあった Python のデータサイエンス本を R で消化した。しかし Python も R も,データサイエンス周りのライブラリは設計思想が似ているのか分からないけど,R でもそれほど違和感無く取り組めた。

映画

La La Land を観た!オススメです。

まとめ

ツイートを頼りに振り返るのは楽(575)

受験勉強のようす 2017年2月

少し落ち着いてきたので,受験勉強*1の進捗をまとめてみる。

〜1月中旬

退職後の身の回りの整理を色々やった。このあたりは割愛。

1月下旬:高校数学おさらい

手元にあった参考書で高校数学をおさらい。数学I,A,II,B,III,Cを順番に演習問題を解く形で進めた(若干古い参考書なのでCが入ってる)。

まずは勉強時間を1日8時間と決めて取り組むことにした。長時間の自宅学習でどのくらい集中力が持つか心配だったので,まあとりあえず働いていた頃の勤務時間と同じくらいは集中力が持つだろう…ということで8時間にした。

また1日8時間の内訳は,ポモドーロタイマーを使って30分単位(25分集中+5分休憩)でリズムを作った。時間を区切った方が集中できて良い。

これを週6日(日〜金)。土曜日は家族と休みを合わせられるのでお休みにした。

毎週金曜日は振り返り。その週の進捗をKPTで振り返って,翌週の勉強プランを立てた。

2月上旬〜今:赤チャート

大学入学時期の感覚をだいたい思い出せたかな…ってなところで,2月上旬から赤チャートに移った。

なお,勉強時間のリズムは1月から変わらず。いや,むしろ1日12時間くらいコンスタントに集中できることが分かって自分でもビックリ。ずっと数学に集中していてコンテキストスイッチが無いからっていうのも大きいかもしれない。

赤チャートの中身はこんな感じ。

f:id:oimou:20170213180855j:plain

基本的に1ページに1つ例題が載っている。解法指針が載っているのはもちろんだけど,解答の文章がしっかり書いてあるのが非常に助かる。証明を書く際の参考になる。

進行ペースとしては,今のところ1日40ページくらいのペースで進んでいる。

ノートの取り方は,だいたいノート1ページに参考書1ページ(=1例題)が対応する感じで書いている。

f:id:oimou:20170213182019j:plain

もうかれこれ何年もノートに証明を書くことなんてなかったけど…久しぶりにノートを取りはじめてみると,行き当たりばったりで見出しスタイルを付けるでなくちゃんとブロックインデントを意識するようになっていて,自分でもビックリした。成長を感じる…。プログラマーの性かもしれない。

また,進め方としては数をこなすよりも理解の定着を優先している。途中で詰まってしまっても,どこまで分かってどこが分からなかったのかを明らかにすることが大事(だと思っている)。

あと,理解しないまま進むのがなんとなく自分の性に合わないというのもある。

難しい問題については,フローチャートを書いて解法を整理するのを心がけるようにしてみた。

f:id:oimou:20170213171205j:plain

フローチャートというツールが効果的かどうかは正直怪しいけど,落ち着いて解法を整理したり,補助的な命題を証明しながら段階的に証明を進めるときには結構役立つし,書いているうちに既知のパターンを思い出したりする。

↓は書籍「いかにして問題をとくか」に書いてある「問題を理解すること」についての一節。

問題がはっきりと心にきざみ込まれて,一寸目を離してもそれを見失ってしまう気づかいがなくなってから出発すべきである。
─ 「いかにして問題をとくか」より引用

素晴らしい言葉。雰囲気で問題を解いている状態にならないように気をつける。

今後

今のところよく引っかかるのがこの問題。意識的に改善したいところ…。

2月は引き続き赤チャートを進める。来月以降は頃合いを見て別科目にシフトする予定。

数学は楽しい!

*1:受験は来年の予定。決して今月受験ではない

#maths4pg 「第6回 プログラマのための数学勉強会」にブログまとめ枠で参加してきた

f:id:oimou:20160320190725j:plain

プログラマのための数学勉強会に参加してきました。

自分はブログまとめ枠ということなので、勉強会の内容をまとめていきたいと思います。 感想をまとめるにあたって参考にしたサイトや資料のリンクを貼っていますが、必ずしも発表者の方がプレゼン中に使った資料ではありませんので、ご了承くださいませ。 詳細な内容については、公開される資料や動画を見ていただくのが良さそうです。

Togetterはこちらにまとめていただいているようです。

発表内容

f:id:oimou:20160319131241j:plain

「心地よさと数学」矢崎 裕一

図形やアニメーションから生み出される「心地よさ」の裏には数学が潜んでいます。 そんな数学の考え方について、ビジュアライゼーションという切り口から紹介されていました。

データビジュアライゼーションでは「データ」をいかにして「実体化」するかがカギとなります。 つまり、目的にあわせてデータを視覚的要素(図形や色など)にマッピングしていく作業が、まさにデータビジュアライゼーションなのです。ビジュアル変数の考え方は下記の記事にもありますね。

個人的には、ソル・ルウィットというアーティストの事例が印象に残りました。

ソル・ルウィットのアートの形式の1つに、ウォールドローイングがあります。 彼は作品を作り上げる際に、自分で壁に作品を描くのではなく、作品を描くための指示書をドラフトマンと呼ばれる第三者に渡し、ドラフトマンに描かせるそうです。 D3.jsでも、予め決められたプログラムにデータを流し込んで「データドリブン」な可視化をするという考え方があります。両者の考え方には近いものがありそうですね。

すでに完成していると思われるものを疑い、心地よさって何だろう、というポイントに立ち返って考えてみるのが重要だということです。

「数学がデジタルアートに! 高速なシェーダで可視化する数学の世界」@h_doxas

doxas氏はWebGL関連の活動を精力的に続けていらっしゃる方で、WebGL開発支援サイトなども運営されています。 自分もWebGLの基礎を学んだのはこのサイトでした。

WebGLを使うと、GPUパワーを活用して高速な可視化ができるようになります。 今回はシェーダとGLSLを用いた可視化について、ライブコーディングと共に紹介されていました。

GLSL editorというGLSLエディタツールを開発されたそうで、ブラウザ上で簡単にGLSLを書いて試すことができます。

エディタを開くと、初期状態ではジュリア集合の可視化コードが動くようになっています。 こんなにヘビーな可視化でも、シェーダを使えばサクサク動かすことができるというのは素晴らしいですね。

最近はモバイル端末でもWebGLが動くようになっており、誰でもすぐに作品を見られるようになっています。 数学の教育コンテンツの1つとして、WebGLを用いた可視化が広まっていくと良いですね。

GLSL editorを使ったチュートリアルもQiitaで紹介されています。

「Wolfram Language コトハジメ 〜 Wolfram Alpha って聞いたことあります?」若林 登

Mathematicaは科学技術計算などの分野で広く使われている数式処理システムです。 そのMathematicaに命令を伝えるための言語がWolfram Languageであり、数多くの関数が実装されています。

科学技術計算のためのもう少しカジュアルな環境として、Pythonでnumpyやscipyを使っている人は多いのではないでしょうか。 Pythonと比較すると、Wolfram Languageは予め用意されている関数の数が桁違いに多いです。 あまりにも関数が多すぎて全てを記憶しておくのは困難だそうですが、その分特殊な計算でも短い記述で済ませられるので、本質的な記述にフォーカスできて思考の邪魔をしないというメリットがあります。 プログラミングの道具というよりは数学的思考の道具という位置づけなんでしょう。

Wolfram Alphaというサービスを使うと、Wolfram Languageを少しだけ(とはいってもかなりインテリジェントで驚きますが)試してみることができます。試しに"cheeseburger"などと入力してみると、チーズバーガーの栄養価などの数値情報が返ってきます。

Pythonスクリプト形式でソースコードを記録するのとは対照的に、Mathematicaでは「ノートブック」という形式で思考と実証の過程を記録していきます。思考の過程を記録するというコンセプトは個人的に興味深いですね。 ちなみにPythonでも、IPython Notebookというものを使うとノートブック形式の記録ができるようになります。

「暗号文のままで計算しよう - 準同型暗号入門 -」光成 滋生

光成氏は「午後のこ〜だ」や暗号技術関連の著作で有名な方です。最近だと「クラウドを支えるこれからの暗号技術」などの書籍を出していらっしゃいます。 これはつい最近読んだばかりだったので、こんな所で著者にお会いできるとは驚きました。

「データを暗号化されたまま計算できる!」という触れ込みでにわかに盛り上がっている準同型暗号ですが、 実際にはどのような原理になっているのか、デモを交えて紹介されていました。

準同型暗号は、ある代数系の数学的構造が写像によって維持されるという性質を用いた暗号方式です。 データが暗号化された状態でも加算を行うことができ、データの機密性を保持したまま計算処理ができるため、センシティブデータを扱うビッグデータ解析などへの活用が期待されています。 有名なものには、楕円曲線上の離散対数問題による困難性を用いた楕円曲線暗号などがありますね。

加法準同型暗号は加算のみ行うことができますが、更に乗算も行うことができる完全準同型暗号(Fully Homomorphic Encryption)というものが研究されています。 完全準同型暗号は、数学用語で言うと環準同型の性質を利用した暗号であり、平文と暗号文の両方が環になるようになっています。 しかし、今はまだ実用に耐えうるレベルの完全準同型暗号は出てきておらず、たった1bitの平文を暗号化するにも1GBの暗号文に膨れ上がってしまうということでした。 (ただし、制限付きで加算・乗算ができるSomewhat準同型暗号というものがあり、こちらはもう少し実用的のようです)

加算と乗算さえできれば全ての関数が実装可能になるため、実用的な完全準同型暗号ができれば更にセンシティブデータの解析が捗ることでしょう。

圏論Haskellは仲良し」大森 健児

大森氏は法政大学の教授をされている方です。まさか大学教授の方まで登壇されているとは! 「圏論Haskellは仲良し」という(大森氏によると「艶めかしい」)タイトルですが、 Haskellを使うと数学的な表現がしやすいというお話をされていました。

圏論は、数学の中でも最も抽象的な分野で、理解するのが非常に難しい分野でもあります。 しかし大森氏自身は68歳になってから圏論を学んだということで、何事も学び始めるのに遅すぎるということは無いんだなあと思い知らされます。 圏論に入門するには「自分の得意分野が圏でどう表現されているか?」というところから始めると分かりやすいとのこと。

Haskellには圏論の考え方が一部取り入れられており、その中に有名な関手(Functor)やモナドがあります。 また、Haskell(というか関数型プログラミング言語)の宣言的なシンタックスも、数学的な表現を容易にしてくれます。 命令的プログラミング言語は「どうするか(How)」でプログラムを記述しますが、宣言的プログラミング言語は「どういうものか(What)」でプログラムを記述するという違いがあります。

オススメ資料として、関手的データモデルで個人的に話題になったDavid Spivak氏の著書が紹介されていたので、リンクを貼っておきます。

LT

f:id:oimou:20160320191137j:plain

LT枠がこれまた濃ゆくて、話についていくのが精一杯でした。

√2をつくる @taketo1024

Swift演算子オーバーロードを利用し、代数的数である√2を定義するという試みです。 Swiftがこういう使い方をされるのは意外でしたが、言語の性質を考えると確かに適役かもしれない! 詳細はこちらのリンクから。

実践Scalaペアノの公理 @busterdayo

自然数の公理であるペアノの公理Scalaの型システムを用いて実装したという話です。 数学的にInvalidな計算がコンパイルエラーを返してくれるのは良いですね。Lintツールとしてあると便利そうです。

せいほうけい育成日記 @nekonenene

多角形を使ってフラクタルを作り上げるゲームを作ったという話です。 生SVGの操作が大変そうでした。Snap.jsとか使うと良いかもしれないですね。あるいはシェーダを!

packing にまつわるアレコレ @simizut22

微分幾何の知識がなさすぎてほとんど何も理解できませんでした\(^o^)/ リーマン幾何を学んで出直します。

Introducing PONS @dankogai

Swiftにおいて任意精度計算や複素数を扱うためのライブラリだそうです。 JavaのBigIntegerやRubyのprimeにも近いでしょうか。Swift人気ですね。

すべての図形を分類した男 @matsumoring

ナチュラルにジョジョ立ちする男すべての図形を分類した男、ルネ・トムの遺した功績についてです。 多様体の関係に「コボルダント」という関係を定義して分類できるようにしたということです。

かんたんベジェ曲線 @butchi_y

ベジェ曲線は通常は媒介変数表示で定義されますが、これを陽関数の形で表してプロットしてみたそうです。 4点以上の制御点を持つベジェ曲線はあまり使われていないらしいですね。確かに見たことがない。

ベータ分布の謎に迫る @kenmatsu4

ベータ分布とは一体どんな事象に当てはまる分布なのかという謎に迫ります。 ベータ分布は順序統計量と関わりが深く、ベイズ統計の分野でよく使われるそうです。バイオインフォマティクスでも使われる基本的な分布なので、個人的に結構アツいです。

始代数とCatamorphism Ryo Mikami

関数型プログラミング言語で言うところのfoldの考え方についての話です。 HaskellFRPライブラリreactive-bananaがなぜバナナなのか分かりました。

まとめ

色々な分野から150人近い参加者が集まり、数学を軸にした様々なテーマの発表を聞くことが出来るというのは非常に貴重な機会でした。 勉強会の主催を続けていらっしゃる佐野さんに感謝です!