hiramekunのブログ

プログラミングと読書と

CPUの性能評価 -クロック周波数-

CPUの性能って何を見ればいいの?

クロック周波数って何?と混乱しています。
今回は簡単にクロック周波数を中心としたCPUの性能指標を見ていきましょう。

クロック周波数

コンピュータには色々な装置が入って降り、それらが同じタイミングで動かなければなりません。そこで、クロックと呼ばれる周期的な信号に合わせて動きます。

そして、1秒間に繰り返されるクロックの回数を、クロック周波数と言います。
つまり、このクロック周波数が大きいほど多くの処理を一定時間内に行うことができます。(頭の回転が早い、というイメージですね。)
例えば、1GHzのCPUというと、1秒間に10億回振動していることになる。

また、1クロックにかかる時間を、クロックサイクル時間と呼びます。

CPI -Clock cycles Per Instruction-

名前の通り、1命令あたり何クロックサイクル必要かを表すものです。
例えば、命令の実行に2黒オクサイクル必要なら、2CPIということになります。

MIPS -Million Instructions Per Second

これは、1秒間に実行できる命令の数を表したものです。
Millionとあるように、単位は百万で表します。
例えば、20MIPSのCPUは、1秒間に2000万個の命令を実行できるということになります。

最後に

今回は基本情報技術者試験の教科書を参考にしました。
また一通り勉強し終わったら受験しようかと思います。
参考資料はこちら

【書評】人工知能は人間を超えるか ディープラーニングの先にあるもの

人工知能は人間を超えるか ディープラーニングの先にあるもの

概要

人工知能の権威である松尾豊先生の名著です。人工知能を学びたい東大工学部の生徒に大人気の松尾研究室でも知られています。
その松尾先生が、人工知能そしてその技術であるディープラーニングについての意義や現状について述べられた本です。

次のような内容が、人工知能ディープラーニングを何も知らない方にもわかりやすいように説明されています。

個人的には、機械学習ディープラーニングの大枠を知りたいという方にのみならず、技術的に深堀していきたいという方の必読書であるように思います。
逆に山本一成さんの「人工知能はどのようにして「名人」を超えたのか?」と共にこの2冊を読めば、導入としての大枠は捉えられているでしょう。

山本さんの本の書評はこちらをどうぞ

感想

AIブームについて

昨今のAIブームについて、第一人者の松尾さんは危機感と慎重さを忘れません。
この言葉は、AIのみならず、他のあらゆる「流行り」に対する警鐘として胸に留めておく価値のある言葉でしょう。
特に技術職の人は流行りに対して懐疑的な見方を忘れてはなりません。

ブ ー ム は 危 険 だ 。 実 力 を 超 え た 期 待 に は 、 い か な る と き も 慎 重 で あ ら ね ば な ら な い 。 世 間 が 技 術 の 可 能 性 と 限 界 を 理 解 せ ず 、 た だ や み く も に 賞 賛 す る こ と は と て も 怖 い 。

人工知能とは何か

人工知能は構造的に、つまり「作ってから理解する」という理解手法をとるのに対して、他の科学の多くは分析的手法、つまり「細密的な構造を解き明かして全体を理解する」という手法です。

人 工 知 能 研 究 者 が 、 知 能 を 構 成 論 的 に 理 解 し た い と 望 ん で い る の に 対 し 、 脳 を 研 究 す る 脳 科 学 者 は 、 分 析 的 な ア プ ロ ー チ で 知 能 を 解 明 し よ う と し て い る

「人間の知能を構成論的に理解する」という目的からすると、現在の研究レベルはまだゴールに程遠いとも述べられています。

人工知能の難しさ

人間の知的活動を機械でどのように再現できるのかについての難しさが述べられています。
人間が何か行動するときに、あらゆる常識や自分の経験を元にして、判断していますが、普段私たちはその情報量がどれだけ莫大なのか考えることもありません。

実際に機械学習のために知識を扱おうとすると、以下のような問題点が生じるということを松尾先生は述べています。

  • 単 純 な 1 つ の 文 を 訳 す だ け で も 、 一 般 常 識 が な け れ ば う ま く 訳 せ な い 。 こ こ に 機 械 翻 訳 の 難 し さ が あ る 。 一 般 常 識 を コ ン ピ ュ ー タ が 扱 う た め に は 、 人 間 が 持 っ て い る 書 き き れ な い く ら い 膨 大 な 知 識 を 扱 う 必 要 が あ り 、 き わ め て 困 難 で あ る 。 コ ン ピ ュ ー タ が 知 識 を 獲 得 す る こ と の 難 し さ を 、 人 工 知 能 の 分 野 で は 「 知 識 獲 得 の ボ ト ル ネ ッ ク 」 と い う 。

  • あ る タ ス ク を 実 行 す る の に 「 関 係 あ る 知 識 だ け を 取 り 出 し て そ れ を 使 う 」 と い う 、 人 間 な ら ご く 当 た り 前 に や っ て い る 作 業 が い か に 難 し い か

将来の展望

コンピュータが創造性を持てるかどうか議論に上がることがあります。そこで、創造性とは、2通りあると書かれておりこれは新たな気づきを自分に与えてくれました。

  1. 概念の獲得
    これはつまりあることに気づくことです。複数のものを説明する一つの要因を発見するなどのことで、日常的に発生しています。
  2. 社会で実現していない創造性
    これはいわば、「社会の中で以前に考えた人がいるかどうか」という相対的なものです。

人工知能が行動を通じて特徴量を獲得できるようになれば、概念の獲得は行えるのではないでしょうか。

そして、人工知能が人間を超えるとされている不安に対して、人工知能の可能性を社会システムの一部として人間がより上手に使っていくことを提案しています。

人 工 知 能 が 人 間 を 征 服 す る と い っ た 滑 稽 な 話 で は な く 、 社 会 シ ス テ ム の 中 で 人 間 に 付 随 し て 組 み 込 ま れ て い た 学 習 や 判 断 を 、 世 界 中 の 必 要 な と こ ろ に 分 散 し て 設 置 で き る こ と で 、 よ り よ い 社 会 シ ス テ ム を つ く る こ と が で き る 。 そ れ こ そ が 、 人 工 知 能 が 持 つ 今 後 の 大 き な 発 展 の 可 能 性 で は な い だ ろ う か 。

最後に

まとめた以外に、ディープラーニングが実際にどのような手法であるのか、どのようにして精度を上げてきたのかなど、技術的な側面も簡単にまとめられています。
大枠を掴むのに非常に参考になり、さらに一瞬で読み終えてしまう面白さがあるので、是非読んでみてはいかがでしょうか。

【書評】人工知能はどのようにして「名人」を超えたのか?

人工知能はどのようにして「名人」を超えたのか?

概要

この本は、将棋の最高タイトルである名人位をもつ棋士に勝利した「Ponanza」を開発し、コンピュータ将棋開発の第一人者である山本一成さんが書かれた本。 次のような内容が、ディープラーニング機械学習に詳しくない人に向けても、非常にわかりやすい例えを用いて丁寧に説明されています。

感想

プログラムは黒魔術

プログラムの内容を還元主義的にきちんと把握している訳ではなく、「うまくいったからそれで良いのだ」という道筋を辿るとのことです。コンピュータ将棋の第一人者からのこの発言には驚かされました。

「 プ ロ グ ラ ム の 理 由 や 理 屈 が わ か ら な い 」 と は 、 た と え ば プ ロ グ ラ ム に 埋 め 込 ま れ て い る 数 値 が ど う し て そ の 数 値 で い い の か 、 あ る い は ど う し て そ の 組 み 合 わ せ が 有 効 な の か 、 真 の 意 味 で 理 解 し て い な い と い う こ と で す 。 せ い ぜ い 、 経 験 的 あ る い は 実 験 的 に 有 効 だ っ た と わ か っ て い る 程 度 で す 。

しかし、この章をくくるこの言葉が非常に印象的です。

今 の 人 工 知 能 と い う も の は プ ロ グ ラ マ の 直 感 や 予 想 さ れ た 性 能 を 逸 脱 す る こ と が 求 め ら れ て い ま す 。 だ か ら ポ ナ ン ザ は 私 の 理 解 の 及 ば な い 範 囲 に い て く れ な け れ ば な ら な い の で す 。

AIの倫理観

知性と知能の違いは次のように山本さんは定義されています。確かに、コンピュータは知能を身につけることはできても、知性までは身につけることができていないように感じます。

知 性 = 目 的 を 設 計 で き る 能 力
知 能 = 目 的 に 向 か う 道 を 探 す 能 力

そしてAIの知性はネット上にある人間の情報から学ぶものなので、人類がいい人であることがAIの倫理観を育てるという言葉は、科学者から放たれた言葉として非常に面白いですね。

最後に

機械学習に興味のある人なら、かならず一度は目を通しておくべき本だと思います。さらに将棋に興味のある方は尚更です。ぜひ一度読んでみることをオススメします。

プログラマの開発のおすすめツールまとめ

はじめに

自分が開発に使っているツールで、これは外せない!というものを集めました。macなので、windows/linuxの方には合わないかもしれません。 また、少しでも開発速度をあげたい思いから、オススメのものや代替ツールなどありましたらコメントをお願いいたします。

ツール一覧

この記事で取り上げているツール一覧です。(fish shellはツールとは呼べませんが。。。)

  • Karabiner-Elements
  • BetterTouchTool
  • HyperSwitch
  • fish shell
  • iTerm2
  • Vimium

キーバインド関連

Karabiner-Elements

https://github.com/tekezo/Karabiner-Elements 言わずと知れた(?)pcのキーを自在にカスタマイズできるツール。 自分は以下の設定を書いています。

  • 英数を他のキーと共に押した時はcmdに、かなを他のキーと共に押した時はctrlにする。
  • spaceキーを他のキーと共に押した時はleft-shiftとして扱う。(これは親指でshiftキーを押せるので非常にタイピングが早くなります。)
  • left-ctrlを単独で押した時はescに。(vimなどで頻繁に押すのでここにしています。)
  • ctrl + f, b, n, pを、矢印キーに。(emacsキーバインドですね。)

こちらに自分の設定ファイルがあるので、ご自由にお使いください。 https://github.com/hiramekun/dotfiles/blob/master/karabiner.json

BetterTouchTool(通称BTT

超便利!「BetterTouchTool」を使いたおすための7つの設定。[Mac] windowsでは標準でアプリを左半分に表示などができるのですが、macにはありません。それを補ってくれるのがBTTです。 以下のような設定をしています。 image.png

  • ウィンドウを右半分に寄せる:cmd + shift + r
  • ウィンドウを左半分に寄せる:cmd + shift + l
  • ウィンドウを最大化:cmd + shift + m

こんな感じに左でサイトを見ながら、右でコーディングをしたりしています。 image.png

さらにですが、windowのサイズ変更だけではなく、ショートカットにアプリを割り当てることができます。自分はよく開くアプリに全てコマンドを振って、開きたいアプリを一発で開けるようにしてあります。

HyperSwitch

こちらのサイトが参考になりました。 Macアプリ「HyperSwitch」ウインドウ単位で切り替え これは、通常のcmd + tabだとアプリケーション単位での切り替えしかできないのですが、それをwindow単位にしてくれるというものです。ブラウザアプリがwindowを2つ開いている時など、これを使うと自分の開きたいwindowに移動することができます。

地味に嬉しい機能

  • cmd + tabを押した後に、cmdを押したままhjklを押すと(vimキーバインドのようですね)、選択中のwindowを移動できる。
  • ctrl + tabを押すと、同一アプリ内のwindowだけが候補に表示される。

ターミナル関連

fish shell

zshと比べて設定が簡単、綺麗なシンタックスハイライト、強力な入力補完など、bashの次に触るshellとしてかなり適当だと自分では思っています。 例えば、fishのconfigファイルを編集する時ですが、今までの履歴を遡って候補を出してくれます。この次にtabもしくはctrl + eを押すことで入力が完了するので、頻繁に同じコマンドを打つ方は非常にその恩恵に授かれます。 image.png

こちらのサイトが非常に参考になりました。 詳解 fishでモダンなシェル環境の構築

注意点

以下の点が、bashzshとは大きく異なります。

  • 文法や環境変数の設定方法(empty enterなどをzshで書いていた方は少し移行が面倒かもしれません)。
  • pythonを使う方は、anacondaのactivateコマンドが最初は効かない。
    • この一行をconfigファイルに追加することで動くようになります。source (conda info --root)/etc/fish/conf.d/conda.fish
  • 新しいshellなので、ググった時に情報が少ない。

iTerm2

https://www.iterm2.com/ 言わずと知れたターミナルアプリですね。色が綺麗にでる、カスタマイズが効く、タブの複製が簡単など標準のteminalよりも良い点がたくさんあります。

  • windowを横に分割:cmd + d
  • windowを縦に分割:cmd + shift + d
  • windowの移動:cmd + [ または cmd + ]
  • windowの複製:cmd + t
  • windowを閉じる:cmd + w
  • タブ移動:cmd + [タブ番号]

Chrome関連

Vimium

ブラウザの操作をキーボードだけで行ってしまえるプラグインです。 ページのスクロールから、リンクのクリックまでキーボードでできてしまうという優れものです。 iでリンク候補が表示され、次にその文字をタイピングするとリンクをクリックしたのと同じ挙動になります。 image.png

こちらの記事が非常に参考になります。 Chromeをvimライクに使えるようにするvimium