The jonki

呼ばれて飛び出てじょじょじょじょーんき

Kindleでコンピューター・ITの50%オフやってるので個人的に興味ある本をまとめた

Amazonが粋なことやってました.9/2までです. 相当な量がセール中なのですが,私がこれまで読んで面白かった本や面白そうな本を載せました.

コンピュータの仕組み

名著と名高い本.技術書でもあるが面白いブログ読んでる感じ.必要知識もオームの法則ぐらいです.

みんな持ってるパタヘネ本.みんな読んだか?パタヘネ本.内容は面白いが長い.

パタヘネ本が長いという方はこちらでも.

結城先生の面白そうな本.買ってみた.

絶対面白いやつ.この辺が詳しいとおじさんと仲良くなれる.

プログラミング

C++もう何年も書いてない...すべて忘れたあなた(私)に.

雰囲気でDockerをやっている.そんな私に.

雰囲気でPandasをやっている.そんな私に.

アルゴリズム

アルゴリズムに興味ないという人が興味を持つきっかけになりそうな本.かなり面白い.

アルゴリズム勉強する人がまず最初に見たほうが良いと思う本.今でもたまに見る.

グラフ大事.読んだことないが評判良いので買ってみた.

NLP

Graham先生のスーパーわかりやすいNLP入門の資料.まず最初に読みたい.

工藤さんの形態素解析本.形態素解析したい人はこの本しかない.

DNN,BERT登場以前っぽいけど,実務でDNN使える場面そんなないし,古典も大切.

IBM→PFNの丸山さんの本.エッセイ風なのでやる気がでないときに良い.

HHKB Professional Hybrid Type-S使いがKeychron K2触ってみた

今更ですがKeychron K2というメカニカルキーボードを買いました.HHKB Hybrid Type Sを使っていましたが,気分転換に買ったらなかなか良かったので比較しつつレビューします. 比較ブログなどはすでに多いのですが,自分が感じた特徴を書いておきます.私(ソフトウェアエンジニア)の環境の要求としてはこんな感じです.

  • 仕事はWindowsとPrivateでMac,両方同じ場所で切り替えて使えるようにしたい.
  • 無線でつなげたい.
  • タイプしていて気持ちいい.

f:id:jonki:20210822170451j:plain

購入

最近,日本でも代理店での取り扱いが始まったようです. アルミフレームでRGBのLEDが付いてるフルフルモデルです. ただ本家と比べると倍近い値段がするので,送料込みでも本家で買った方が安いですね.クーポン適用などもあるので買う際は探したほうが良いです.

Keychron K2 Wireless Mechanical Keyboard for Mac and Windows

私の場合,パームレストと送料いれてもこんなもんでした.発送も注文から1週間してないぐらいだったと思います.

f:id:jonki:20210822170914p:plain
明細

HHKBとの比較

HHKB Professional HYBRID Type Sとの比較して行こうと思います. f:id:jonki:20210822170240j:plain

Keychron K2の方が良いと思った点(良いと思った順)

  • バッテリーがリチウムイオンで充電できる.

    • HHKB Hybrid最大の弱点は単三電池の採用だと思っています.静電容量式であるためスタンバイから復帰するためには電源ボタンを長押しする必要がありとても面倒です.かといって常時オンモードにすると電池が1ヶ月で切れます.K2はリチウムイオン形式なので,机に転がっているUSB-Cで適当なタイミングでいつでも充電できるので便利です.10年後もこのキーボードを使うなら単三電池の方が良いかもしれませんが,たぶん違うの使ってるのでリチウムイオン方式が実用的です.
  • キー数が多い

    • キー数は少ないほうが玄人感は強いのですが,やっぱりHHKBは少なすぎです.デバッグIMEでファンクションキーをよく使うので,独立していないキーの入力はとても面倒です.またカーソルキーも,例えばWinキー+矢印,のようなショートカットはHHKBでは3つのキーを押す必要がありタルいです.キーマップをカスタマイズするというのも手ですが,最近はデフォルト設定厨になっているのでこういうカスタムはなるべくしたくありません.
  • 切り替えキーの独立

    • Win/Macの切り替えキー(Win-Alt / Cmd-Optの位置を入れ替えられる)及びUSB or Bluetooth接続の切替キーが,側部に独立している.ショートカットキーや再起動が必要で面倒なDIPキーより便利です.ただOSの切替をしない人には響かないですね.
  • Bluetooth接続切替のストレスが少ない

    • 私のHHKBはHybridなのでBTに対応していますが,接続切替にたまに失敗します.またキーを押し間違えた際も,異なるモードから脱出するのに時間がかかったりと,正直出来は微妙でした.Keychron K2を買って毎日BT切替を行っていますが,問題なく行えています.また接続切替もKeychronの方が若干早い気がしています.
  • LEDが気持ちいい

    • フルカラーLEDがガチャガチャしてて,最初はいらないと思ったんですが意外と気分転換になります.無駄にLEDアニメーションを切り替えるボタンキーも付いているので,変化させて遊んでいます.あと地味に便利だと思ったのが,BTの接続切替にFn+1,2,3を押すのですが,数字キーが点滅→点灯と,接続のステータスがわかるのはとても良いです.
  • 安い

    • HHKBの1/3程度のお値段なのは見過ごせません.

HHKB の方が良いと思った点

  • キーマップ変更の純正アプリがある

    • HHKB Professionalシリーズには純正のキーマップ変更ツールが公開されています.Keychronはこういうものはなく,それぞれサードパーティのソフトを使ってねということです.キーマップの変更はソフトウェアレベルでなく,ハードウェアレベルで行ったほうが不具合も少ないので,この点HHKBは優れていると言えます.
  • キーサーフェス

    • K2というかKeychronのキーサーフェスはすごいツルツルしているのに対して,HHKBはエンボス加工というか表面に非常に細かいツブツブがありサラサラしています.手汗が多い人はK2だと指とキーとの摩擦がそれなりに発生しそうで,好みが分かれそうです.私個人的にはHHKBのサラサラしてるほうが引っかかりもなくて好きです.K2も慣れましたが.

人によって好みは分かれると思った点

  • サイズ

    • K2はHHKBと比べて,列と行が1つずつ増えているため大きいです.ただ机の上に置いてしまうと正直どちらも大差ないかなと感じています.個人的にはこのキー数が一番使いやすいです.似たところでいうとThinkpad Keyboardも好みです.
  • 重さ

    • HHKBは540gに対して,Keychron K2 アルミフレームは985g.そうめっちゃ重いです.持ち運びをしないのであればむしろ重いのは好ましいんですけどね.
  • 打鍵感

    • これはそもそも静電容量式とメカニカルでまったくの別物です.HHKBの独特なスコスコ感はやはり癖になります.K2で今回は赤軸を選びましたが,キータッチが軽いので私はこれも好きです.
  • 静音性

    • これはどちらも甲乙つけ難いです.普通に叩く分にはKeychronの赤軸は普通の赤軸同様,それなりに高いカチャカチャ音がでます.HHKBはType Sを使っているので静かではありますが,コトコト低く響く音なのでどちらも深夜とかにはちょっと気を使います.その点では赤軸のほうが押し切る必要がない分,音を抑えた打鍵ができるかもしませんね.

Keychronの残念だったところ

  • 一緒に買ったパームレスト
    • キーボードではなくパームレストです.木製のパームレストなのですがちょっと歪んでいて置くとガタガタします笑.Youtubeに上がってるレビュー動画でも同様の報告を見ました.Keychronのサポートに文句をいったところ,新品を送ってくれましたが,新しい方もちょっとガタガタします.実用上は問題ないのですが,A型の私は気になるところ.購入を検討されてる方は注意してください.

まとめ

Keychron K2を買ったので,HHKB Professional Hybrid Type-Sと比較レビューを投稿しました.HHKBの良い点をなかなか上げていませんが,あの打鍵感は大好きではあるのでHHKBも未だに好きなキーボードではあります.なので気分でまた使います.それまではしばらくメカニカル生活を楽しみます.それでは.

イラストで分かるNetwork Simplex

先日, 0x-seminar - [0x03] 最適輸送の情報科学における進展 というセミナーがあり,最適輸送について熱い2日があったらしいです.私はセミナーの存在を知らず,後からスライドを見ました.

1日目の資料は横井さんの資料で,そもそも最適輸送ってなんなの?とかNLPと絡めてこんな研究あるよ!っと色々とリンクが貼られていて勉強になりました.

2日目の佐藤さんの資料では,直感的な理解を重要視しつつ,最適輸送の問題をきっちりと定式化していて非常に勉強になりました.270ページぐらいあるのですが,すべて見る価値アリです.

その中でNetwork Simplexという最適輸送における主問題(輸送量のマトリックスを求める)を解く方法を最初に説明しています.Network Simplex法の解き方を誤解を恐れず簡単に言うと,適当な解から初めて違反的な辺がなくなるまで反復的に修正していく手法です.この修正により目的関数は広義単調減少(ゼロ改善もある)です.

なんとなくイメージはできたものの,具体的にどう解けていくのか確かめていくべく自分で問いてみました. 実例と解き方に関しては,Transportation Problem: Balancing | by Rodion Chachura | Medium の事例を参考にしました.この記事はpythonコード付きで分かりやすいです. この記事をざっと眺めた後,以下のスライドを1枚ずつめくっていくとあら不思議,なんとなくわかると思います.

speakerdeck.com

CNNのReceptive field(受容野)を可視するWebアプリを作った

f:id:jonki:20210321093723g:plain

CNNまるでわからん,jojonkiです.CNNを扱う上でReceptive field(受容野)を正しく認識することは,CNNを設計するにあたって非常に重要です(ということを最近認識しました).モデルの表現力が足りない,そんなときReceptive fieldを確認してみるのもよいでしょう.

ただ多段のCNNで組まれたプログラムを見てもReceptive fieldが直感的にわかるには私には経験不足,ということで可視化するツールをWebアプリをGithub pagesで作ってみました. 1次元CNNのカーネルストライド,パディング,ディレーションを指定して可視化できます.最後段のレイヤーの注目データ(赤色のブロック)から最初の入力データに矢印をたどっている色を塗っている領域がReceptive fieldです.Receptive fieldを大きくするためには,カーネルサイズを大きくしても良いですが,計算量が増えるのでストライドやディレーションを挟むことで非常に大きなReceptive fieldを得ることができます.

Visualizing Receptive Field

// コードも公開しているので何かバグを発見した方はissueでご連絡いただけると嬉しいです.



作るにあたって参考にしたページ(興味のある人向け)

Receptive fieldの理解には視覚的な理解が大事だと思うのですが,あまり視覚的に説明してくれるサイトは多くありません(だってビジュアル作るの面倒ですもんね).ただ下記のサイトはReceptive fieldを自分の設計したCNNに応じて可視化してくれます.私が作ったページでも大いに参考にさせていただきました.Receptive fieldの計算だけならこのページだけで良いのですが,CNN越しのビジュアルイメージも欲しかったので今回のものを作りました.

Receptive Field Calculator, Fomoro AI

そもそもCNNや先程でてきた用語がよくわかない?という方はこちらのCNNの解説が参考になると思います.アニメーションもあり素敵です. github.com

Receptive fieldの勉強に関しては,Googleエンジニアの方のブログで勉強にしました.こちらもよく引用されています. もとの系列データのサイズに合わせて可視化することでReceptive fieldがわかりやすくなっています.Receptive fieldの計算式に関しては覚えるものではないので,手元で図を書きながら納得感を持って導けるとよいです.式の導出イメージは人によって違うと思うので自分なりの解釈で良いと思います.またこのブログはディレーションを考慮していないのですが,Receptive field計算式の第2項(前レイヤーのReceptive field両側に対する計算)にディレーションを乗算すれば実現できます(jojonkiの該当コード). medium.com

下記はReceptive fieldの話ではないのですが,Checkerboard Artifactsという問題を可視化しているページです.カーネルストライドを変えることでこの現象が発生する様子を可視化できるツールで非常に素晴らしいです. distill.pub

PCAとLDA

PCA (Principal Component Analysis) と LDA (Linear Discriminant Analysis)について,目的関数の導出やpythonで自力で書いたりしたものをまとめたので公開します. 結構丁寧に書いたつもりです.

github.com

参考文献