たかくんの成長

たかくんの成長

大学X年生。学習記録や学生生活に関することを書きます。内容は間違っています。

(続)独自ドメインをはてなブログから切り離しました。

追記:移行先は,さくらのレンタルサーバに置いた自作ホームページにつなげました。

http://www.takagrow.com

ブログのようなものは,今後はそちらのホームページに書く気がします。みる人が100分の一くらいになりそうですが,手元に自分の文書がまとまって存在するっていう状況の方が僕の気持ち的に落ち着くのでそうしたいと思っていました。はてなとか外部サービスに置いたままだと,サービスが消えたら終わりですし。(とはいったものの,サービスが終わるのなんてあっても当分先だし,実用上は問題ない。けど,手元にある方が嬉しいタイプ。)


どうぞよしなに。(まだSSL化してない。)

中国語の学習を一年越しに(まじめに)やりはじめた

最近,中国語の学習をまじめにやりはじめた。もともと中国語を学びたいとは思っていたものの,大学の第2外国語でスペイン語を引いてしまったのと,なんやかんや英語を優先してやっていたので取り組めずに一年が経ってしまったのだった。
一年が経って,スペイン語も終わり,英語の学習も結構いい線行っているので,あらたな言語に取り組む余裕が出てきた。(単に春休みで暇だからだけど)そこで,一年越しに中国語に取り組み始めたというわけ。なんとも単純な。

これで言語学習はすでに4ヶ国語目なので(といってもスペイン語は授業で単位をとった程度でまったく流暢でもなんでもないけど),学習のコツはある程度つかめている。中国語学習はそこをフル活用して,効率的に取り組んでやっていけたらいいな。ポイントはやっぱり音声,耳を使うこと。とりわけ中国語は発音が難しいので,ピンイン(中国語の発音記号,ローマ字表記)と実際の音を比べながら音に注目して語彙をゴリゴリ増やしている。使っているのは,この辺りの教材。

キクタン中国語【初級編】中検4級レベル
キクタン中国語【入門編】中検準4級レベル
改訂新版 紹文周の中国語発音完全マスター
中国語検定 HSK 公認 テキスト 4級 改訂版 [音声DL付]

言語学習っていうのは,目標をある程度決めるか日常の中にうまく溶け込ませないと続かないし上達しないので,そこを上手くやろうとしてる。明確な目標に据えられるものとしてはHSKっていう中国政府公認の中国語の試験があって,これはなんにしても受けた方が良さそうだと思っている。外に見せられる資格があるっていうのは,生きていく上でもいろいろ役に立つ場面があると思うし。ただ,自分の性格上,試験を目的にして勉強をするのはあまり好きではないので,普段の学習を進める上ではネット上の中国語のコンテンツに気軽に触れることができて,情報収拾ができるレベルっていうのを具体的な目標に据えて取り組むことにする。これは英語の時と一緒。

英語の時は,英語を学ぶことを目的にせずに,何かを学ぶ際に英語を経由するということを実践したおかげでだいぶ伸びたので,そんな感じでいけたらいいと思う。

中国語学習は,一見すると漢字をいっぱい覚えている日本人にとってはラクなように思えるけど,実はそこが大きな落とし穴。というのも,漢字の形とイミはある程度知っていたとしても,発音の知識はまったくのゼロからだから。そして,発音を身につけないとリスニングすることがまったくできない。文字を読む,読解という点から言えば日本人はだいぶ有利なのは間違いないけど,そこから出ると,つまり音声や動画やコミュニケーションという範疇に入ってしまうと,日本人であるアドバンテージがほぼゼロになるので,そこに気をつけないといけない。

と思ったので,しばらくはリスニング全振りモードでやっています。文字だけでええやという甘えモードに入ると,後から地獄を見るんだろうなと思っています。また,三日坊主になるんじゃねえのか?っという疑惑もありますが,今度こそは大丈夫なはず。なんでかっていうとある程度英語が読める・聞けるようになってきて精神的余裕が出てきたから。Audibleだいぶ効果あった。

具体的に何をやっているかというと,まず発音記号の基礎を抑えてから,キクタン中国語を音声にフォーカスしてブン回しています。英語だと,日常用語の90%は3000単語を覚えることによってカバーできるという話があるけど,中国語の場合だと格変化がないのでその量が1200単語くらいにおさまるらしい。それを知って,さっさと潰そうと思ってキクタンの入門編と初級編を同時に買って(合計1100単語くらい?)潰しています。これくらいの基本レベルだと,毎日のように上達が実感できてたのすぃ。たぶん,これをしっかり潰せば見える景色が変わるであろう・・・。


ひとつ中国語学習のツライとこを挙げるとするなら,文章を読むときに,意味は漢字から容易に分かるんだけど発音がまったくわからんていう場面が頻繁に生まれるところ。コレがツラい・・・。英語とかスペイン語とかなら発音よりも意味の方がわからんって場面がほとんどでしょ。意味が完全に分かって発音が分からない,これって結構ストレスフルな体験で新鮮。

最後に,最近みつけたTEDの外国語学習に関する動画をシェア(英語)。語学学習には結局何が必要なの?っていう内容。こんな感じの英語なら,ほとんど,98%くらい聞き取れてる。内容は,まあ,そらそうだよねっていう感じで納得できる。


The secrets of learning a new language | Lýdia Machová

計算理論の概要 PとかNPとか,オートマトンとかチューリングマシンとか

計算理論とは

計算とはなんなのか,計算の複雑さとはなんなのかについて詳しく検討する分野。分かりやすいモチベーションとして,ある計算を行うのにどれくらいの時間がかかるのか,また,どれくらいのメモリを必要とするのかについて知りたいとする。この疑問を突き詰めると,そもそもその計算は実行可能なのかどうか,計算とはなんなのかという問題にたどり着く。つまり,計算の性質について具体的に調べるには計算という概念自体を厳密に定式化する必要があるということ。

計算の定義

計算と計算をするもの(機械)は表裏一体で,計算について定義するには計算をする機械(計算の行い方)を定義する必要がある。それはつまり,計算機のモデルを考えるということ。計算機のモデルにはさまざまなものがあるが,代表的なのはやはりチューリングマシン。チューリングマシンは無限のテープの上に,左右への移動とテープ上の情報を読み書きのできる装置を考えたもの。もちろん計算モデルはチューリングマシンだけではなく,他にも多くある。有限オートマトン,プッシュダウンオートマトン,レジスタマシン,ラムダ計算,セルオートマトンなど。各計算モデルの計算能力はそれぞれ異なる。ここでいう計算能力というのは,簡潔に言えば他の計算モデルを自身の上にシミュレートできるかどうかということ。

これらの計算モデルは,動作によってより細かく分類することができたりする。とくに,チューリングマシンについては決定性チューリングマシン,非決定性チューリングマシン,マルチテープチューリングマシン,ユニバーサルチューリングマシンなど。これらは,判定問題においては計算能力は等価だと言えるが,計算時間や空間の複雑性においてはカテゴリーが別れ得る。例えば非決定性チューリングマシンによって多項式時間Pで解かれる問題群はNP問題,決定性チューリングマシンによって多項式時間Pで解かれる問題群はP問題と呼ばれる。一般にNPとPが同じ集合であるかどうかは明らかになっていない。(P≠NP問題)

計算の性質

これらの計算機を理論として厳密に定めることで,計算の性質について議論することが可能になる。ここで興味のある計算の性質というのは,

  • 計算が終了できるかどうか(無限ループしないか)
  • 計算にかかる時間はどれくらいか(時間)
  • 計算に必要なメモリはどれくらいか(空間)

などが主な対象。

基本的には,答えがYesかNoかで答えることができる判定問題(決定問題)と呼ばれる問題群を対象にして議論をすることが多いようだ。これらの問題に対して,そもそも計算を終了させることができる類の問題なのかどうか?実行できたとして,それは現実のリソース(計算時間,メモリ)で実現させることができるのだろうか? そういった問いに答えるのが計算量の理論の一つの目的ではある。これらを分析するために,ほとんどの場合チューリングマシンが計算機のモデルとして使われる。その理由としては,単に扱いやすく,証明が比較的容易であること,現実のコンピュータの挙動に近いことなどが挙げられるらしい。

実際にある計算に対しての計算時間や必要なメモリ量を分析するためには,フォーマルなチューリングマシンの定義が必須なので,ここでは触れないことにする。しかし基本的な発想としては,計算時間を処理に必要な試行錯誤の回数,メモリ量を処理に必要となるテープの長さと考えて議論する。

計算理論はコンピュータとは独立の”理論”である

計算理論は,現実に存在するコンピュータの存在を完全に無視しても成り立つ。むしろ,現実にガチャガチャ動作する計算機の背後にある計算そのものの本質を探る理論である。計算理論で扱う計算時間やメモリといった概念は,ある計算に何秒かかるか,とか,何バイト使用するかといったような具体的な話ではなく,計算の構造そのものを考えた時に,ある計算に本質的に備わっている量のことを指している。それゆえに,現行のコンピュータの性能に惑わされずに,理想的なコンピュータの性能やその限界を探ることができる。たとえば,時間を巻き戻すことのできるようなコンピュータが存在しても囲碁の問題を効率解くことはできないらしい*1

参考
Turing machine - Wikipedia
Model of computation - Wikipedia
Computational Complexity: A Modern Approach Introduction to the Theory of Computation
計算理論の基礎(上に同じ)

『やわらかいロボット』を読んだ。ソフトロボティクスとは何か。

ソフトロボティクスとは,やわらかい素材を用いてロボットを作ろうとする分野である。

従来のロボティクスは,制御の難しさや制作の難しさから,ロボットのほとんどを固い素材で作成してきた。工場で働く組み立てロボットしかり,ASIMOしかり。

なぜ固い素材ばかり使ってきたのか。(いま言ったけど)

やわらかいというのは,計算がとっても難しい。計算量が莫大だったりそもそも予測不可能だったり。計算が難しいということは制御するのが難しいということ。なぜなら物理的な計算によって,動作する未来を正確に予測できないから。

その点,固い素材は力学的な動作が簡単に記述できて,未来を制御することが比較的容易くできる。だから安心して使える。実際,工場で働くロボットなんかは,ロボットの動作もカッチリ固定されているばかりか,ロボットが扱う物体なんかもほとんど固定されている(ベルトコンベアで一定の位置に流す,常に同じところに部品を置く,とか)。


でも,逆に言えば,固いロボットは不確実性に弱い。ちょっとでもロボットの予測(あらかじめ計算しておいた状態)から外れてしまうと,マトモに動いてくれなくなる。よく言われるのは,工場では人間にはまったく不可能なくらいの速度,精度で活躍してくれる一方で,乱雑にモノが散らばった人の家の中でドアを開けるといった単純な作業がロボットにとっては非常に難しかったりする。

この問題に対してソフトウェアで対処しようとしているのが,今の機械学習だったり強化学習と呼ばれる技術。この手法はとっても強力だけど,高価な計算資源が必要だし,エネルギー的にもお高い。

これをハードウェアの方でもっと柔軟に対応できないのか?????というところに,ソフトロボットの旨味の一つがある。

例えば,人型ロボットを考えて,このロボットに地面を歩かせようとする。一方は固い素材を使ってつくられたもの。もう一方はやわらかい素材を使って作られたものとしておく。

固い素材の方は,少しの衝撃,少しのつまづきで簡単に転倒してしまうため,それを防ぐために高価なセンサーと高価なコンピュータを積んで,超高速で衝撃に反応して転ばないような軌道を考え,足の動きを修正する。

一方でやわらかい素材の方は,少しくらいの衝撃なら足のうらやふくらはぎ,ふともものクッション性で吸収してくれる。もちろん,大きくつまづいたときはちゃんと計算してやらなければいけないけど,総合的な計算量は大きく減ることが期待される。要するに,やわらかい素材そのものが計算を大きく代替してくれると考えることができるのだ。このような考え方を,Morphological Computingというらしい。

このmorphological computingは,我々ヒトも日常的に行なっていると考えられている。たしかに,僕たちが普段歩くときには,足うらの感覚を常に見張ってたりはしないし,たぶんそんなことをしていたら歩くだけで脳みそがオーバーヒートしてしまうだろう。

物質としてのやわらかさに計算をやらせておいて,たくさんサボっていくという考え方は,なんかいいなと思ったのであった。これってつまりまあ,現実は遅延ゼロの物理シミュレータだからなあ,ということだ。

参考
新山龍馬『やわらかいロボット』
細田 耕『柔らかヒューマノイド』

やや一般的な情報の集め方

何か知らないこと,モノにぶち当たった時にまず必要になるのが情報を集めること。そんな情報の集め方をまとめておく。この場合は,調べるものがある程度明確に分かっていることを想定する。調べるもの,そのものがよく分かっていない場合,これはなかなか難しいハナシになると思うのでここでは扱わない。

その一 どんな情報が欲しいかを軽く想定する

単に何かを調べたいと思ったとしても,その欲しい情報のパターンにはいろいろなものがある。例えば,調べたい対象がまったく自分にとって新しいものだった場合(つまり調べなければなにもかも分からない状態),ある程度自分にとって馴染みがありさらに細かい情報が欲しい場合,専門的な情報などなど。また,調べる先の情報の性質にもいろいろなものがある。例えば読めばすぐわかるような情報から,自分で細かく確認してみなければ分からない(計算したりコード書いたり絵を描いたり体を動かしたり)ようなものまで。ある程度自分の求めているものとその対象の性質について知っておくことで,やたらと難しい情報に触れて分からなさすぎて爆発したり,簡単そうだけど間違った情報に触れまくって爆発したりするのを防ぐことができるかもしれない。

その二 欲しい知識の種類と自分の目的を考えて取り組み方を選ぶ

ある程度自分の欲しい知識と,それがどんなものであるかについて軽く想像を巡らせたところで,どうすればその情報は能率よく集められるのだろうかというところに話が進む。ここで,普段自分がどうやって情報を集めているのかというところを順番に書いてゆく。

全く知らない情報について調べる時

  1. Google検索で「〇〇〇とは」,「〇〇〇」,「〇〇〇について」など手を替え品を替え検索し,表示された結果の一覧の上から1〜20サイトくらい選び,眺める。
  2. Youtubeで「〇〇○」と調べ,関連する動画を調べて眺める。

Google検索の時に同時に調べるサイトの数は,知識の性質と対象に対する興味,その時の元気による。注意することとしては,検索結果上位に来るものが正しい情報であるとは限らないこと。むしろ正しくないものの方が多かったりする。コツとしてはURLやタイトルを眺めて,アクセス数稼ぎを頑張っていそうなサイトをなるべくパスすること。

Youtubeで知らないことを検索するっていうのはあんまりメジャーではないような気がするけど,トピックによっては豊富な講義動画or解説動画があったりして,とてもいい。また,文字ではなく動画なので,分からなかったことが一発で入って来たりする。コツとしては,英語でも検索すること。Google検索だけだと分かりづらいが,Youtubeだと英語と多言語の情報量,質,人口などの圧倒的格差を感じることができる。

ある程度知っているけど詳細は分からない時

まず

自分がどの程度の知識を欲しているのかを見定める。ここが一番重要な段階だと思ったりする。ただ,ここでいう見定めるっていうのはあくまで短期的な話で,長期的にどうなっていくかは分からないので,そういう方向性も見据えた上での情報の集め方を書いてみる。

かる〜く全体像だったり,おもしろい話が分かればいい!

  1. 本屋や図書館でそれについて取り扱った一般書を買うor借りる
  2. そして読む
  3. 満足する。もしくはもっと知りたいと思う。


もっと専門的に知りたい!けど専門的な部分になると全く分からない

  1. Google(Amazon)で専門的な話を取り扱っているけど初心者向けの本を探す
  2. それを読む


もっともっと!

  1. 専門書を読む
  2. 論文を読む


その三 発信する側になる

MIPSにおける単一サイクルプロセッサの構成図

MIPSにおける単一サイクルプロセッサを一歩一歩,構成しています。このページではadd命令から徐々に作り上げていっています,が,出来上がったのはすべての機能を含んだものではありません。

f:id:karia68:20181218235218j:plainf:id:karia68:20181218235223j:plainf:id:karia68:20181218235227j:plainf:id:karia68:20181218235232j:plain

こういう図を理解するにはただ眺めてるだけでも無駄で,一本一本自分で確かめながら書いてみるしかなさそうです。僕の中ではなるほどな!となりました。


間違いがあればご指摘いただけると幸いです。
全ての学習記録はコチラです。
サイトマップ - たかくんの成長

MIPSアーキテクチャにおける命令

MIPSアーキテクチャにおける命令セットについて書きました。最初見たときはイミワカランコレだったのですが,黙ってマイクロアーキテクチャを回路図で構成するところまで進んだらわかるようになりました。そらそうか。

f:id:karia68:20181218234801j:plainf:id:karia68:20181218234805j:plainf:id:karia68:20181218234808j:plainf:id:karia68:20181218234812j:plain


主要なアーキテクチャはintelのx86というものです。MIPSよりやや複雑でわかりづらいようです!たとえば命令が必ずしも32bit固定ではなく,変動したりします。そのようなものを可変長の命令というようです。逆は固定長です。

間違いがあればご指摘いただけると幸いです。
全ての学習記録はコチラです。
サイトマップ - たかくんの成長

ビッグエンディアンとリトルエンディアンについて

ビッグエンディアンとリトルエンディアンについて書きました。初めて見たときからこの名前がなんとなくツボでした。コンピュータ界隈は日本語があまり作られていないので,いろいろおもしろいですね。

f:id:karia68:20181218234644j:plainf:id:karia68:20181218234648j:plain

ようするに,ただの順番の決め方のちがいのようです。

間違いがあればご指摘いただけると幸いです。
全ての学習記録はコチラです。
サイトマップ - たかくんの成長

SRAMとDRAMについて

SRAMとDRAMについて書きました。DRAMがふつう,思い浮かべるメモリの方です。SRAMはCPUの内部とかそのあたりに使われているやつです。

f:id:karia68:20181218234341j:plainf:id:karia68:20181218234346j:plain

どちらも一長一短なようです。使い分けが肝心でござる。

間違いがあればご指摘いただけると幸いです。
全ての学習記録はコチラです。
サイトマップ - たかくんの成長

メモリ(Memory)の回路について

メモリの回路について書きました。一般的なメモリです。一般的なメモリはアレイ構造をしており,アドレスを入力することで特定のデータにアクセスすることができます。

f:id:karia68:20181218234028j:plainf:id:karia68:20181218234033j:plain

ワードサイズを32bitにしてしまったので線がとても多くなりました。

間違いがあればご指摘いただけると幸いです。
全ての学習記録はコチラです。
サイトマップ - たかくんの成長

ALU(Arithmetic / Logical Unit)とはなにか

ALUという回路について書きました。ALUは足し算引き算とか,ANDORなどの論理回路をまとめて取り扱った回路です。制御信号を用いてどの回路を使うのか決めます。ゲームでどのモードを選んで遊ぶのか,足し算モードか引き算モードか・・・みたいな感じです。

f:id:karia68:20181218233855j:plainf:id:karia68:20181218233902j:plainf:id:karia68:20181218233906j:plain

だんだんと複雑さマシマシになってきました。ALUはいろんなとこでめいっぱい出てきます。

間違いがあればご指摘いただけると幸いです。
全ての学習記録はコチラです。
サイトマップ - たかくんの成長