論理の流刑地

流罪に遭い戸惑う世捨人の雑記

ダンゴムシでもわかる特異値分解(SVD)

脊椎動物なめんな。節足動物なめんな。

Introduction

この世に生を受けて30年以上たつけど、もう5万回くらいSVDのやりかたを覚えて忘れてまた覚え直すを繰り返している。
肌身に染み込んで行かないのが文系ブレインの限界ですよね...

ゆえに、SVDの概要・用途・実装方法をここに記す。

[参考文献]
①:千葉大羽石研究室のサイト(授業「医用画像工学」のスライド)
②:小野滋さんのWeb上の公開資料(Greenacre1984の和訳・解説)
③:ボレガラ・岡崎・前原, 2016, 「ウェブデータの機械学習」,pp.158-162.

ウェブデータの機械学習 (機械学習プロフェッショナルシリーズ)

ウェブデータの機械学習 (機械学習プロフェッショナルシリーズ)

SVDの概要

基本の定義

任意のm × nの実数行列A (rank = k) があるときに、次元m×mの直交行列Vと、次元n× nの直交行列U
そして非対角成分がゼロで対角成分 \lambda_iが、
  \ \lambda_i > 0  \ (i <= k ), \  \lambda_i = 0 (i > k )

となる行列Sが存在し(この非ゼロの対角成分を 特異値とよぶ)

 A = V S U^T

と変形できる。

便利な別表現

 V = \begin{bmatrix} v_1 & \ldots & v_m   \end{bmatrix}
 U = \begin{bmatrix} u_1 & \ldots & u_n   \end{bmatrix}

とすれば、以下のようにも、表現できる。
 A = V S U^T = \Sigma_{i=1}^ k \lambda_i v_i u_i^T

基本性質

前提知識:フロベニウスノルムによる距離の定義

 || \boldsymbol{A}||_F = \sqrt{\Sigma_{i=1}^m \Sigma_{j=1}^n |a_{ij}|^2  } = \sqrt{ trace(A^T A) }
をフロベニウスノルムという。

ちなみに2つめの等号においては、次元数の等しい行列 A, Bの成分の積の総和は、 A B^Tのトレースに等しいという性質(参考URL)を利用している。
 trace(AB) = trace(BA) なので trace(A^T A ) = trace(A A^T)


このフロベニウスノルムを使うと、二つの行列A, Bの距離を || \boldsymbol{A - B}||_F として定義できる。

性質①:最小二乗近似を得る方法としてのSVD

行列AのSVDが得られているとき、降順に並んだj \ ( j <= k ) 個の特異値と、それに対応する左右の特異ベクトルからなる
  A_{j^*}  = \Sigma_{i = 1}^j \lambda_j u_i  v_i  は、
すべてのランクjの行列X_{j^*}のなかで、距離|| \boldsymbol{A - X_{j^*}}||_F を最小化するような行列となる。


すなわち、この意味で  A_{j^*} は、Aの「ランクjの最小二乗近似」であるといえる。

性質②:行列Aと転置行列A^Tとの積の成分分解

SVDにより、 A = V S U^Tが得られているとき、以下が自明に導かれる。


 A A^T = V S U^T (U^T)^T S^T V^T = V S U^T U S^T V^T = V S S^T V^T
 A^T A  =  (U^T)^T S^T  V^T V S U^T  = U  S^T  V^T V S U^T = U S^T S U^T

ここで、 S S^T = S_{row}^2 ; \ S^T S = S_{column}^2 と表現することとすると
 A A^T =  V S_{row}^2 V^T \iff   AA^TV = V S_{row}^2 \iff AA^Tv_i = \lambda_i^2 v_i
  A^T A  =  U S_{column}^2 U^T \iff   A^TAU = U S_{column}^2  \iff A^TAu_i = \lambda_i^2 u_i


となり、 A A^T  A^T Aが分析対象として意味のある行列のときは、
それぞれを左右の特異ベクトルv_i ,\  u_iと特異値\lambda_iの二乗を用いてランクkで表すことができる。

性質②の具体的な例

 A A^T  A^T Aが分析対象として意味のある行列のとき」とかいきなり言われてもピンとこないと思うので、一つ例をあげよう。

たとえばm人分のケースについてnつの変数の観測値を保存した行列X =\begin{bmatrix} x^1 & \ldots & x^n   \end{bmatrix} があり、
そこから各列について、変数の平均値\bar{x^j}を差し引いて中心化した行列X^*を得る。


すると、ランクn×nの行列(X^*)^TX^* は、変数の分散共分散行列(にスカラmをかけたもの)になるし、
いっぽうで、ランクm×mの行列(X^*)^TX^* は個人間の距離(にスカラnをかけたもの)を表した行列(対角成分は重心からの距離)になる。

したがって、X^*についてSVDを適用しておけば、
変数のばらつき(分散・共分散)や、個人間の距離についての全ての情報を、k個のベクトルの線形和として表現できる。

(厳密にはもっと説明が必要だけど)これが、いわゆる主成分分析の大枠である。
カテゴリカルな変数に対して用いられる「対応分析」や「多重対応分析」と言われる手法も、 A = V S U^TAをどう選ぶかだけの違いに帰着して説明することができる。
(詳しくは別稿で)
その意味で、SVDは多くの分析手法を統合的に理解するうえで非常に強力な方法・枠組みだといえよう。

性質③:2つの特異ベクトル間の変換

もう一度、SVDの別表現を記載する。
 A = \Sigma_{i=1}^ k \lambda_i v_i u_i^T

この式の両辺に、右特異ベクトル u_j \ ( 1 <= j <= k )をかけると、特異ベクトルの正規直交性から、以下のようになる。

 A u_j  = \Sigma_{i=1}^ k \lambda_i v_i u_i^T u_j   = \lambda_j v_j  u_j^T u_j = \lambda_j  v_j
ゆえに、

 v_j = \frac{1}{\lambda_j}  A u_k

となり、左特異ベクトルを右特異ベクトルとSVDの適用対象行列A、そして特異値によって表現することができる。

また、上の別表現を転置したのちに右から v_j \ ( 1 <= j <= k )をかけることで、同様に

 u_j = \frac{1}{\lambda_j}  A^T v_k

を得られる。

固有値分解との関係性

上述の性質②より、
 A A^T =  V S S^T V^T = V  S_{row}^2  V^T
 A^T A = U S^T S U^T =  U  S_{column}^2 U^T

が成立する。よく見ればこれは A A^Tおよび A^T A固有値分解である。
よって特異値\lambda_iというのは、 A A^T A^T A固有値分解したときに得られる固有値平方根である。

実装方法

以下の手順を実装すればいい。Simple!

  1.  A A^Tあるいは A^T A(通常は計算量が少ない方、すなわちm < nだったら A A^T、m > n だったら A^T A)を固有値分解し、その結果から特異値の対角行列Sと右あるいは左特異行列SもしくはUを得る。
  2. 上記の性質③の変換式を利用して、SUの得られていない方を得る。

ちなみに A A^Tあるいは A^T Aは対称行列なので、いくつかの効率的な固有値固有値分解計算の効率的な方法(ヤコビ法、3重対角行列を用いた逆反復法、ユーザーである我々は詳しく知る必要はない..)が使えるよ。

Rで確認

Rにはsvd()というSVDのための関数が備え付けであるが、一応上の方法で計算されていることを確認するために検算してみる

# 適用データ生成
# 元データは、Clausen,1998=2015「対応分析入門」, p.189より
tbl <- matrix( c( 395 , 2456 , 1758 , 147 , 153 , 916 , 694 , 327 , 1347)  , byrow=3  , ncol = 3)
colnames(tbl) <- c("強盗" , "詐欺", "破壊")
rownames(tbl) <- c( "オスロ" , "中部地域", "北部地域")

#分布に変換
tbl_p <-  tbl / sum(tbl)
mgn_c <- apply( tbl_p , 2, sum)#列周辺分布
mgn_r <- apply( tbl_p , 1, sum) #行周辺分布

D_clm <- diag(1/sqrt(mgn_c)) #列周辺分布の-1/2乗を対角成分とした行列
D_row <- diag(1/sqrt(mgn_r)) #行周辺分布の-1/2乗を対角成分とした行列

# SVDを適用する対象の行列をつくる。
mat_A <- D_clm %*% (tbl_p - mgn_r %o% mgn_c) %*% D_row


## SVDを適用する
svd_res <- svd( mat_A) 

#--結果--#
# ちなみに上記の解説とはuとvが逆になってるので、注意が必要(uが左, vが右)
#$d  (特異値)
#[1] 7.927067e-01 8.484083e-02 1.339025e-17
#
#$u(左特異ベクトル)
#          [,1]        [,2]      [,3]
#[1,] -0.9210524  0.02831857 0.3884076
#[2,]  0.2288391 -0.76764442 0.5986273
#[3,]  0.3151112  0.64025003 0.7005604
#$v (右特異ベクトル)
#          [,1]       [,2]      [,3]
#[1,]  0.1744326  0.6379811 0.7500356
#[2,] -0.8992856 -0.2070410 0.3852524
#[3,]  0.4010719 -0.7416968 0.5376125


## 実際に固有値を利用する方法でやってみるver
#今回は行列Aが正方行列なので計算量的にはどっちでもいいが、
#とりあえず、左特異ベクトルを求めてから変換公式で右特異ベクトルを求める形にする。

mat_B <- mat_A %*% t(mat_A) #固有値分解の対象行列を生成
evd_res <- eigen(mat_B, TRUE) #固有値分解する

sval <- sqrt(evd_res$values ) #平方根をとることで特異値をえる
u_vec <- evd_res$vectors #左特異ベクトルを得る

v_vec <-    t(mat_A) %*% u_vec %*% diag(  1/ sval)  #変換公式 v =  1/λ * A^t * u を適用
#補足: 1/λjを対角成分とする対角行列を右からかけることによってj列を1/λj倍している

### 固有値分解をアプローチによる結果 ###
#> sval
#[1] 7.927067e-01 8.484083e-02 8.575436e-09
#> u_vec
#           [,1]        [,2]       [,3]
#[1,]  0.9210524  0.02831857 -0.3884076
#[2,] -0.2288391 -0.76764442 -0.5986273
#[3,] -0.3151112  0.64025003 -0.7005604
#> v_vec
#           [,1]       [,2]          [,3]
#[1,] -0.1744326  0.6379811 -1.941982e-08
#[2,]  0.8992856 -0.2070410 -6.473275e-09
#[3,] -0.4010719 -0.7416968  2.427478e-08
 
#--この場合、二軸で分散を説明しきっているので、3個目/3列目の特異値/特異ベクトルは誤差というか無視して良い
#--2つ目までのの特異値と特異ベクトルは先ほどのsvd()関数の戻り値と完全に一致しており、求める結果が得られた
#--なおひとつめの特異ベクトルは符号が違うが、左右一緒に同一固有値に対応する特異ベクトルの符号を変えさえすれば-1をかけてもよい(正規直交基底の性質と変換公式を考えれば明らか)

Conclusion

さいきんは、ずっと、これをきいている...
www.youtube.com


SVDがとても便利だってわかって、さらにその仕組みがわかったので、
次はSVDの枠組みでMCA(多重対応分析)とCA(対応分析)を説明するYO!
SVDがわかると両手法の仕組みや違い・共通点を超エレガントに説明できるYO!

Enjoy!

Catch up!(藤井猛, 2017, 「四間飛車上達法」)

四間飛車上達法 (最強将棋レクチャーブックス)

四間飛車上達法 (最強将棋レクチャーブックス)

非常にいい本だった(さすが藤井"てんてー"御大)
急戦(棒銀)への対応の定跡について、ここまでいろんな思想を交えながら詳説してくれる書はあまりなかったのではないだろうか。

しかし何より白眉は、藤井九段の生き方が凝縮されているような次の一言にある。
このために1400円(税別)を払ってもいいくらいだ。

至言

p.55より抜粋。

私はスタートが遅かったんですよ。
研修会に入ったのが14歳のとき、そして高校一年になるときに奨励会に入ったんです。
早熟の天才がごろごろといるこの世界では、記録的に遅い部類に入ります。


しかも私は、将棋教室などには行かず、一人で本を読んで勉強していました。
考えながら読むというより、最初はただひたすら読む、ただ読む、という感じです。
一冊の本をボロボロになるまで読む。将棋の月刊誌をひたすら読む。
そのうち棋譜が全部頭の中に入ります。


すると知らないうちに、本に書いてない変化も含めて考えることができるようになる。
月刊誌であればひと月後に次の号が出て、あとは同じことの繰り返しです。
それが私の勉強法でした。


さすがにアマチュアの三段くらいになってからは実戦を指す機会も増えましたが、
それでも1日に数局を上限としました。その数局を集中して指す。
そして局後の検討を真剣にやって、反省すべき点をきちんと洗い出す。


私は、指す戦法も指す局数も、厳選して強くなったタイプなんです。

非常に示唆的である。
分野を問わない、ビハインドを負った状態からの弱者の逆転法のエッセンスが詰め込まれたエピソードだ。

Conclusion

あのウサギとカメの例のレースは教訓としてアレなケース
勝者敗者いずれにしたってダメ ウサギはバカで油断しちゃっただけ
ある意味カメはさらにそれ以下 敵のミス待ちってそれでいいのか?
天賦の才能を弱者代表が打ち負かし格差解消
しようって場面でカメは無策すぎ 勝算もねぇのに余りにウカツすぎ
そういうとこマジしょせん動物の限界
....
武器はたゆまぬK.U.F.U.
常に練習 常に研究
知恵を結集し 君をレスキュー



弱者が勝ち上がるとこに見出す人間の叡智!
藤井システム最強!Enjoy!

「世界を動かすプロジェクトマネジメントの教科書」(佐藤知一, 2015)

モチうめぇ。ピザうめぇ。

Introduction

プロジェクト・マネジメントという概念やその実行技術というものは、 業界や立場、そしてチームで仕事をするか/個人で仕事をするかという違いを超えて必要な知識だと思う。
(学校で教えてもいいくらいだと思う。道徳や総合学習よりよっぽど健全な社会の形成に役立つだろう)

どうやって仕事を適度な作業単位に分解しどうやってスケジュールに落とし込むのか、
そしてどう進捗を管理していくか、というのは(やや大仰な言い方だけど)人生のコア・スキルであると思うのだが、 意外と誰も教えてくれないのである。

ただ、PMBOKやP2Mなどの規格となるような知識体系はややとっつきにくく、 実際の使用シーンに応用しづらいきらいがある。

その点、日揮にお勤めの佐藤氏は、ブログ(タイム・コンサルタントの日誌から)や個人サイト(マネジメントのテクノロジーを考える)において、実際にプロジェクトをマネジメントしていくうえでの、ノウハウや考え方、ツールの作り方・使い方に関して、業務経験で培った肌感覚に沿ったわかりやすい語り口で解説してくれている。正直めっちゃありがたい。

その佐藤氏の著書である本書では、海外プロジェクトに抜擢された若手エンジニアが、
PMの達人である大学の先輩に、教えを乞うというストーリー形式でわかりやすくproject mangementの要点が解説されている。

(類似本にありがちな)「Xつのポイント」的な感じで列挙してくのではなく、実際の作業手順まで示してくれている点が白眉だと思う。
Amazonのレビューでも指摘されているが、本のタイトルが若干軽い感じ(意識高い系な感じ)なので誤解をうけてしまいそうなるのが心配になるほど、実用的な本だ。

備忘用メモ

備忘用に重要だと思う箇所だけ抜き書きしてく。

プロジェクト = アクティビティの連関という世界観(p.52)

じつは、現代プロジェクトマネジメントの理論や技法は、1950年代に米国において、プロジェクトという大きな仕事の塊を「システム」と捉えたことからはじまったのです。

プロジェクトを「アクティビティ」と呼ぶ作業要素が違いに連関したシステムだと考えました
そこから、重要な技法が次々に生まれたのです。

逆にいえば、ひとつひとつの要素のアクティビティがしっかり定義されているからこそ、しっかりとしたシステム=プロジェクトが成立する。

アクティビティの形式(pp.70-71)

  • アクティビティとは、プロジェクトを構成する「部品」である
  • アクティビティの具体的構造とは、インプット・アウトプット(成果物/完了状態)・リソースと指示・報告である
  • なんども似た形のもの繰り返されるようなのPJTについては特にアクティビティ・リスト(=WBS辞書)を作る必要がある。これは仕事のBOM(部品表)のようなものである。

だれでも正しいWBSを作れる方法(pp.75-)

本全体のキモとなる部分かもしれない。

WBSの作り方は、成果物の分解構造からアプローチする方法(P-WBS)と、作業フローに沿った仕事の機能的な分解から作る方法(F-WBS)が存在する。
どちらも有力な方法*1だが、この本では両者の考え方を組みあわせることでアクティビティを洗い出す方法を推奨している。

紹介されているWBSの作成手順は以下の通り。

  1. プロジェクトの「成果物の構造図」をつくる(→P-WBS的発想)
  2. プロジェクトが最終成果物にいたるまでの仕事の「プロセスの構造図」をつくる(→F-WBS的発想)
  3. 両者のマトリクスを作成する
  4. マトリクスのマス目(=最小単位のアクティビティ)をグループ化して、適正なワークパッケージを形成する
  5. マネジメントの分担を意識して、ワークパッケージに整理番号をふり、WBSに構造化する。
  6. 各ワークパッケージのインプット・アウトプット・必要リソースを、アクティビティリストに記述する(=WBS辞書の完成)

実際の作業イメージも本のなかでは示されていて、とてもわかりやすかった。
会社によってはF-WBSのコード体系が共通で整備されていて、そのコードが社内言語化されているし実績もコード別に管理されている、というエピソード(おそらく佐藤氏の勤務先の日揮のことだろう..)も興味深い。

「一回限りの仕事=Project」をマネジメントするための知識体系ではあるけれど、
それでも共通化できる部分のマスタを整備して、練度を高めて高速化するのがこういった技法のもうひとつの使い方ではないか。

スケジューリングの方法(pp.115-121)

クリティカル・パス法の説明などの部分である。

  1. アクティビティリスト上で、各アクティビティに対して「先行アクティビティ」が何であるか明確にしておく。
  2. アクティビティリスト上で、各アクティビティの所要工数が定義されている
  3. プレシーデンスダイアグラム(Precedence Diagram)を書いて、順序関係を図示する
  4. 一番はじめのアクティビティから後続のアクティビティに向かって、最早着手日と最早完了日を順番に書き込んでいく(ここでクリティカル・パス*2がわかる)
  5. 最後のアクティビティから前のアクティビティにさかのぼっていくように、最遅完了日と最遅着手日を画定していく

ちなみに4は「フォワードスケジューリング」、5は「バックワードスケジューリング」と言う。
いきなりガントチャートとか引く前に、順序関係を図示したほうがいいよね、っていう話。

クリティカル・パスの短縮化の定石(pp.122-125)

どうしても納期を短縮したいときには、

  1. ゆとりの集中化(個人がもっているバッファを集中管理した上で削減する)
  2. 並列作業化

の2つの方法を使う。前者はチーム・プレーのときのみ使えるワザで、後者がより個人単位の仕事にも用いやすい。

クリティカル・パス上のあるアクティビティの完了が次のアクティビティの開始条件になっているとき、
実は先行アクティビティを100%完了させることが、次のアクティビティに必要でない(例えば70%段階まで仕上げられれば次に移れる)場合がある。

こういった場合に、先行アクティビティを構成するいくつかの作業のうち、後続アクティビティに必要な部分のみ完了した時点に最早着手日をずらす、という方法をとる、というのが「並列作業化」が意味するところである。
(実際にこういった変更を施す場合は、後続アクティビティに必要部分とそうでない部分に分割して、別々のアクティビティとして定義し直すほうがスマートだろう。たぶん。)
このような操作を行った場合に、クリティカル・パスが別の経路にうつることがあるのでそれも考慮すべしである、とのこと。


この「並行作業化」は大人数が関わる共同作業としてのプロジェクトだけでなく、個人で行なっている様々な仕事を高速化するための方法論としても有効だと感じた。
当然視されているタスクA→タスクBというフローを、タスクAをa1, a2, a3と分割することによってa1→a2→B(並行してa3)といった感じに短縮することができないか常に検討する姿勢が重要だろう。

工程表への追記によるスケジュール管理

・なんかかっこいいところ

工程表は、航海士にとっての海図に似ています。
工程表もつくらずにプロジェクトを始めるのは、海図を持たずに航海に出るようなものです。

もちろん、多くの会社は最初に工程表をつくってはいるでしょう。
ただ、それを最後までアップデートせずに使い続けるところも少なくないようです。
ちょうど、航海に出たけれど、海図に自船の現在位置や進路や速度をいっさい記入しない航海士のようなものですね。
(p.163)

ガントチャート上で進捗を示すときは、「イナズマ線表記」か「二重線表記」のいずれかを使う。
(→後者しかなじみがなかったので、イナズマ線表記のほうが直感的でいいなと思った)

・よりわかりやすくかつ可視的・参加的な方法として、F-WBS × P-WBSマトリックス上にそのままポストイットを貼っていって進捗を管理する方法もある(→これ結構いいな)

Conclusion

身も蓋もないけど、ちゃんと締め切りを守れるようにするためには、まずしっかりWBSを作ろう。
んで、いきなり天守閣をつくるのではなく石垣たるアクティビティをしっかり定義しようっていうのが著者の主張で、それは正鵠を射ている。

WBSを作るような思考習慣っていうのは、(ロジックツリーとかの広まりとともに)それなりにもう日本にも根付いてきたといえるが、
そもそもWBSのマスタとしてのアクティビティ・リストを整備するのが管理のためにも作業全体の高速化のためにも大事だぜっていうのが、佐藤氏の主張の特徴的かつ示唆的なところだといえる。

brevis.exblog.jp
brevis.exblog.jp

佐藤氏の最近のブログの記事(↑)でも指摘されているように、いきなり工程表を引いたり、
WBSを書き下すのではなく、まず「基本部品」たるアクティビティの定義がなされて、その組み合わせとしてプロジェクトを表現する、というのが本筋である

Enjoy!

*1:ただし佐藤氏はこの記事では、「仕事のプロセス自体は大筋に変わりがないので、WBSのマスタが作りやすい」という理由でF-WBSを推奨している。この観点には多いに賛同できる

*2:よくクリティカル・パスに「隘路」と訳語がつけられているがこれは正しいのだろうか...なんか違和感が

word for Mac 2016で数式挿入のshortcutを設定する

the 備忘of備忘。

従来word for Macでは「ctrl + =」が数式の挿入のKeyだったが、2016ではそうなっていないので、
以下の手順を踏んで自分で設定する必要がある。

  1. 「ツール」→「ショートカット キーのユーザー設定」を選択
  2. 「分類」で「すべてのコマンド」を選び、「コマンド」で「数式挿入」を選び、下のボックスで適当なキー(Ctrl + Command + - とかが無難)を選んで「割り当て」ボタンを押す。

固定効果モデルでロバスト標準誤差 in R

備忘用メモ。

Rでパネルデータを扱うときに、固定効果モデルを行うときは、
plmパッケージを使うのが一般的だ。

最近の社会科学(経済学、社会学etc)で固定効果モデルを使うとき、
table上で報告されるのは、頑健標準誤差(robust standard error)である場合が多い。

従属変数がy , 独立変数x1 , x2 とする

Stataで

Stataを使って分析するときは、以下のようなコードをかくことになる。

xtreg y x1 x2, fe vce(id  time)

Rで

Rで固定効果モデルを行い、
上のStataコードと同じ標準誤差を得たい場合には、以下のようなコードになる

library(plm)
p_data <-  pdata.frame( test_data , index= c("id", "time") ) #plm用にデータ変換
fe_res <- plm( y ~ x1 + x2 , data = p_data , model="within") #plmで推定

### clusterロバスト標準誤差を手に入れる ###
cluster_n <- length(unique(test_data$id) ) #クラスタ数をみる

library(lmtest)
coeftest( fe_res , vcovHC(fe_res, type="HC1" , cluster = "id" ) * (cluster_n / (cluster_n - 1)) )

・plm()の戻り値に、クラスター変数を指定しつつvcovHC()を噛ませて、係数推定値のcluster-robustな分散共分散行列を得ている。
・coeftest() 関数の引数として指定する際には、clusterの数を取得しておき[クラスター数 / (クラスター数 - 1) ] を、vcov()の戻り値にかけて補正する。

なんでこうする必要があるのか

なぜこのような回りくどい補正が必要であるのかは、以下の記事(の最初の回答)に詳しい。

stata - Clustered standard errors in R using plm (with fixed effects) - Stack Overflow

・Stataでクラスタロバスト標準誤差を求めるとき、標準誤差を補正するためのスケールパラメータとして、
G_Nクラスター数、Kはパラメータ数、Nはケース数とすると、

  C =    \frac{G_N}{G_N - 1} \frac{N-1}{N - K}

を分散共分散行列にかけている。

・しかしRの場合は、スケールパラメータの第2項  \frac{N-1}{N - K}しか使っていないために、
Stataでの出力に合わせるためには、vcovHC()の出力に第1項 \frac{G_N}{G_N - 1}を外からかけてやる必要があるのである。

『「超」発想法』(野口悠紀雄, 2000)

Introduction

ヒラノ教授シリーズもあらかた読んだので、今野浩の高校の同級生である野口悠紀雄の本をよむ。
とりあえず今野氏が描く野口氏は、スーパーウルトラ猛烈ハイスペック勉強マシーンという感じである。
(「あのころ、僕たちは日本の未来を真剣に考えていた」のなかで今野氏は、実は野口氏がバツイチだということを暴露しているが、これは本人の許諾をとっているのだろうか...)
ヒラノ教授もパワフルな老人だが、野口氏も(最近なんかで読んだんだけど)散歩しながら浮かんだアイディアを音声メモで記録して、帰宅したらすぐに原稿に起こすようなスーパー後期高齢ソルジャーである。
自分が仕事で尊敬する師匠にもそういう人がいるのだが、1940年代生まれでずっと第一線を駆け抜けてきた人の底力ってやばすぎるよね..

「超」発想法

「超」発想法

「超」XX法シリーズは、かなり売れているが、まぁ職業柄これから読もう。

内容

かいつまんでね..

序論

インターネットやIT技術がさまざまなコストを下げて仕事のやり方を変えてきたよ(ここで代表例がGoogleじゃなくてYahooなのが時代を感じさせる)
これからは「発想における競争の時代」やで。

1章:「超」発想法の基本原則

野口長老曰く、以下5つが発想を導くとのこと。

  1. 発想は、既存のアイディアの組み替えで生じる。模倣なくして創造なし。
  2. アイディアの組み替えは、頭の中で行われる。
  3. データを頭に詰め込む作業(勉強)がまず必要
  4. 環境が発想を左右する
  5. 強いモチベーションが必要

(個人的感想)
「模倣なくして創造なし」というのは強く同意する。まず勉強が必要というのもそうだろう。
ただなー。2点目と5点目はマッチョイズムが透けて見えるというか、今野浩曰く「1日16時間勉強する男」だった野口氏ならではなのではないかと思うのである。

たとえば、「アイディアは頭の中でおこなわれる(べきだ)」ということについて、野口氏は以下のように語っている。

全ての思考は頭の中で行われるのだから、これは自明の命題と思われるかもしれない。しかし、必ずしもそうではない。
なぜなら、多くの人は、「アイディアの組み合わせは、カードや発想マニュアルなどの外部的な補助手段の活用で生み出される」と考えているからだ。
そして、そのような手法が、一般に「発想法」だと考えられている。

第二原則は、この常識を否定する。「組み合わせ」といっても、可能な数は、膨大になる。
だから、発想の過程で必要なのは、新しい組み合わせを機械的に作ったり、それらをいちいち点検したりすることではなく、
むしろ多数の組み合わせのうちから無意味なものを排除すること
なのである(p.30)

うーん、これは「ええ感じの組み合わせ」(=アイディアの候補)がほっといても、マニュアル化しなくても出てくる人の論理な気がするなぁ。

「頭脳は、不必要な組み合わせや意味のない組み合わせを自動的に排除する能力をもっている」とポアンカレは言う。カードで組み合わせを試みれば、無意味なものも扱わなければならならくなる。つまり、頭の中で効率的にできることを、わざわざ非効率的にしているのだ。
(中略)

それに、発想のための基本的な方法論は、学校の勉強や日常生活、あるいは遊びを通じてすでに取得している
だから、格別新しい発想法を学ぶ必要はないのである。そして、方法論ばかりを意識していては、アイディアは浮かばない。
手段だけに気をとられると、肝心の発想作業がおろそかになってしまう。
(pp.31-33)

ここらへんがねー。天才側の発想というか、凡人はそもそも基本的な方法論を取得してない、と思うんだよなぁ。
方法論を意識しないとアイディアが浮かばない場合もあるし、方法論を(意識せずとも)何らかのフォーマットによって強制し、それを順次組み合わせることでアイディアを含む成果物が(アホでも、病気がちで体力なくても、メンタルがやられていても)できるようなシステムを構築するのが大事なんじゃないのって思う。

「強いモチベーションが必要」ってそりゃそうなんだけど、そりゃポアンカレや野口氏がモチベーションをもって自分を引き締めれば、
複雑な問題を小さい問題に分割してどういう順番でやればいいのかを判断・処理するっていう一連の流れが頭の中でAutomaticになされるんだろうけど、
そうじゃない人のほうが多いんだよなー。私もそうだけど。

無意味な組み合わせをつくることを排除することと外部出力をしないことは同義じゃないし、
有用な組み合わせを導くことも、無用な組み合わせを取り除くことも、それをうまく手助けするためのヒューリスティクスはありうると思うし追求できるんじゃないか。

このあとの第4章ではKJ法川喜田二郎がボッコボコに批判されている。
立花隆氏の「これが利点となるのは、頭が鈍い人が集団で考えるときだけである。普通以上の頭の人が一人で考える場合には、これらの特徴は欠点となる」という言葉を引用しつつ、KJ法を以下のように、批判する。

このように、「普通の人は頭の中でやっている作業を、なぜわざわざカードに書く必要があるのか?」という点がKJ法に対する最大の疑問である。

「普通の人」って誰なんだろうっていう反駁が浮かぶのだが、まぁ野口氏のポジションみたいなものを考えると、ある意味それは納得できる。

ronri-rukeichi.hatenablog.com
↑この記事でも書いたんだけど、川喜田二郎は高校大学と隣に梅棹忠夫っていう天才がいて、
どっちかっていうとそういった天才に伍する成果を人工的に集合的につくるうえで、ヒューリスティクス的なエンジニア的な方法をとったわけである。

なんか今野浩野口悠紀雄という日比谷高校の同級生を並べてみても、似たような関係っていうのはあって、
二人とも東大工学部卒ではあるが、大蔵官僚→経済学者という道を歩んだ野口と、エンジニアとして生きてきた今野はかなり違う。
それは、個の力で周りを圧倒しながら生きるか、集団として周りと協調しながら生きるか、という違いでもある。

自分の頭の中の黒板でだけ色々と組み立てて、その結果を出力するだけでいいなら、
そりゃ天才は個人で「文章にかかないで、宙でかんがえるほうがうまくゆく」(by梅棹忠夫)だろう。

しかし共同研究の多いエンジニアにはそれは許されないし、(エンジニアとは言い難い)川喜田二郎も移動大学では「頭が鈍い人(とは言わないまでも凡人)が集団で考える」成果をよいものにする必要性に迫られたからこそ、より万人でもOutputの質が安定するような方法を見つける必要があったのである。

天才じゃない(っていうか頭の中だけで考えるのが不得手な)立場からすれば、前述の立花発言をもじって、
「頭の中で考えるのが利点となるのは、頭が異常に切れる人が個人で考えるときだけである」と言い返したいところではある。

2章: 発想はどのような行われるか?

天才のマッチョな方法にはなんかあんまり同意できなかった。が、
ポアンカレさんのよい言葉があったので記しておく。

発見するということは、まさに、無用な組み合わせをつくらないで、有用な組合せをつくることに存する
かかる有用な組合せは、その数きわめて少ない。発見とは識別であり選択である
(「科学と方法」より)

あと、

3章: 発想の敵たち

「邪魔者を排除して集中しよう。以上!」みたいな章。いや、それも大事だけど。

4章:間違った発想法

なんと1章丸々使ってKJ法批判を展開している。そこまで注力することなのだろうか?
天才には凡人が許せないのか?と思うが、まぁ天才だからしゃーない。

5: 正しい発想法

結構これは部分的に有用なことが書いてある章。

複雑な現実を単純化・抽象化した「モデル」が、多くの学問やビジネスにおけるアイディアの基本っていうのは心から賛同できる。
また、「抽象的なモデルで記述することによって、一見無関係な分野の研究結果が応用できる」(p.148)というのは
あまりにも重要なことだろう。この原理を利用すると、かなり面白いものが書けたりするのである。

問題を分解してから、単純化して考えるのが問題解決の基本というのは、任天堂の故岩田聡社長も言っていたことである。

世の中のことって
だいたいは複雑じゃないですか。
複雑なことに対して
仮説を立てて考えていこうとしたら、
絶対に人は単純化する
わけです。

分析とはものごとを要素にわけて分解して、
そのなかで
「こうすればこれは説明がつくよね」
という仮説を立てることですから、
わたしだけでなく
みんながやっていることなんです。
だからプログラマーの特権ではないと思います。

ただ、プログラマー
それを毎日やっていますので、
いくつも仮説を立てては
頭のなかで比べる訓練はすごくしています。
毎日筋トレをしている、
という程度の自負はあるんです。
トライアンドエラーの回数は多いですから。

プログラムをする人が
みんなそうしているのかどうかは
知りませんけど、わたしはそうしているんです

ほぼ日刊イトイ新聞 - 社長に学べ!

私もプログラムを書くので、この話はすごいわかる。
(あと付け加えるのなら、どんな複雑な問題も、定義済関数による単純な処理を組み合わせることによって対応する、というプログラミングの進め方=制約が、非常に問題解決や知的生産に有用だと考えている)

章後半の「遊びが大事」っていうのはよくわからなかった。
「近年の日本では発想を養うための遊びの環境が失われている」と言われても、そんなん今の若者はどーすればええねん。

第6章以降の内容は割愛。パソコンという新しいおもちゃが誕生してむっちゃウキウキしているミレニアム期の野口氏が見られます。

Conclusion

アイディアとは模倣のことだ(というか既存要素の組み合わせ)!
んで「イマジネーションとは記憶のことだ」(by ジェイムズ・ジョイス)!

天才は頭の中でうまく編集して組み合わせてアイディアつくれる!
悔しいから天才よりも高速に外部出力しながらアイディアを生み出す仕組みを作ろう!


Enjoy!

冬の原稿用BGM10選(本当に疲弊しているとき用)

Motivation

あまりにも時間と余裕のない人生であり、喉は痛み目は腫れ心は荒む。
あまりにも寒い人生で、寒い世相で、寒い季節だ。しかし仕事はたまり、締め切りは迫る。
選挙?そんなものは公園の鳩の餌にした(いや、ちゃんと期日前投票行きましたよ...)

そんなときは、コンビニで「ほっとレモン系」のものを買ってきて、音楽を聴きながらとにかくぼーっとして仕事をする気分になるまで気持ちが「無」に達するのを待つのがいい。

とにかく、とりあえず「机の前で、椅子に座った状態で落ち着く」ってのが大事なんですよね。
これが、ベットやソファに横になりながら、スマホで動画とかみだすと、もうこれは堕落ですよね。
カンダタに蜘蛛の糸を垂らしてくれた天も、そんな姿の私をにはせいぜい火傷不可避のロウソクくらいしか垂らしてくれないだろう。

村上春樹も、そういっていた。

すぐれたミステリー作家であるレイモンド・チャンドラーは「たとえ何も書くことがなかったとしても、私は1日に何時間かは必ず机の前に座って、一人で意識を集中することにしている」というようなことをある私信の中でのべていたが、彼がどういうつもりでそんなことをしたのか、僕にはよく理解できる。

チャンドラー氏はそうすることによって、職業作家にとって必要な筋力を懸命に調教し、静かに志気を高めていたののである。そのような日々の訓練が彼にとっては不可欠なことだったのだ。(「走ることについて語るときに僕の語ること」p.118)

マジで筋力の調教大事っすよねー。ハルキ先輩もそう思うっすよねー。

冬、心が疲れているとき、落ち着きたいときになにをきくか


書き出してから気づいたけど、そこまで冬感ないっていう。
まぁアドレナリンじゃなくてセロトニンから攻めるっていうかダウナー系な感じっていうかなぜだか落ち着く曲(これはあくまでもわたしが落ち着くだけで、ほかのひとにとっては落ち着かないかもしれない)の自分用メモになった。

冬の歌っていうか、冬ってなんか静かな気分になりたくなる(わたしだけなんだろうか)から、
冬に聴きたくなる歌ってことですね。

[1] 冬恋歌(タオルズ


もう20歳前後のときとか、寒い時に作業しなきゃいけないときとか、
冬の夜にアホみたいな量のぐらいのコードを書かないといけない時とかは、とりあえずミルクティー(あのクッソ甘いやつ)自販機で買って、
これを聴きながら放心状態ですよね。。。

タオルズは冬向けの曲が多く、
・山吹色の木の下で(【タオルズ】山吹色の木の下で【雪ヶ谷失恋白書】 by だいふく 音楽/動画 - ニコニコ動画
・こんなにも悲しい(【タオルズ】こんなにも悲しい【Boys and Girls】 by だいふく 音楽/動画 - ニコニコ動画
・葉桜(【歌詞付】タオルズ - 葉桜 by ゆう1015 音楽/動画 - ニコニコ動画

あたりも冬の心情に、非常になんというか沁みるものがあるのではないでしょうか。

[2] クリスマス・イブRap(Kick the Can Crew


クリスマス・イブRAP 歌詞付き


もう20171224が近いですけど、やっぱKREVA

あの頃の2人の生活を
もう一度くれないか聖なる夜

の渾身のドヤァ感は、色褪せない。
ドヤァしてるのに寂寥感を感じさせるこの絶妙な感じ。

最近Kick復活してたけどLITTLEだけおっさん化すさまじかったなぁ...

[3] 曖昧劣情Lover(koyori)

オムすけさん歌唱Verが正直めっちゃいいですね。
イントロからAメロのあたりが、すごいいい感じですね。


[4] White Days(コブクロ

www.dailymotion.com

これ、瑛太らが出ていた「銀色のシーズン」というもはや誰も覚えていないスキー映画の主題歌だったんだけど、
ちりとてちん」でブレイクした青木崇高がだいたい粗暴な役をやってるのって、この映画でかなり水路づけられたのではないだろうか。

イントロがすごい落ち着く。あとやっぱりコブクロの曲全体にいえることなんだが、
小渕パートから黒田パートに切り替わった瞬間になんか眠ってた細胞がぞわっと動き出すみたいな感覚ないでしょうか。
(これは別にどちらかがうまい・へたではなくて、二人とも素晴らしいから起きる現象だと思うのだが)

[5] 夏日憂歌SMAP

下の動画だとこの頃の中居くんは歌上手かったとかいわれてるが別にそんなことはないと思う(失礼)

もう冬じゃねーじゃないかと。
どっちかというと曲調的にはオレンジとかのほうがいいんじゃないかと。
そういうお叱りをうけそうだが、なんか落ち着くからしょうがないよね。

[6] 粉雪(レミオロメン


粉雪 レミオロメン


説明不要。やはり完成されてた曲だからあれだけ大ヒットしたのである。
しかし私はこの曲を、映画「モテキ」のなかで、墨田役のリリーフランキーがノリノリで
体全体を回しながら(球場でのウェーブのようなポーズで)熱唱していた姿を思い出しながらいつも聴いているのである。

あのリリーフランキーの謎の魔力によって、この曲がリリースされた当時の青春の思い出など吹っ飛んでしまった(そもそもそんな思い出はなかった)

[7] 泡色の街(ヒトリエ


ヒトリエ『ルームシック・ガールズエスケープ』MV全7曲クロスフェード / HITORIE - Roomsick Girls Escape

なんか冬の道をマフラーとかコートとかに包まれながらとぼとぼと歩いてると、
このまま家にも目的地にもつかず、体の感覚が麻痺したまま、ずっと眠ったように永遠に歩いていけないだろうか、とか考えてしまう(明らかにおかしい)のだが、
そういう感情を抑えつけずに穏やかな心境にさせてくれるような、そういう曲ですね。

[8] 今夜はブギー・バック小沢健二 featuring スチャダラパー


小沢健二 featuring スチャダラパー - 今夜はブギー・バック(nice vocal)

オザケン(と略すのが正しいらしい)復活記念。
冬感はないけど、冬寒い中真夜中作業してるときに、「あーこんなニッチな作業の成果誰が需要するんだろう」っていう気分を鎮静化するのにおすすめです。

てか映画「モテキ」のEDは、今夜はブギー・バッグが流れるなかで、
Webサイト(動画のキュレーションサイト的な)風をスクロールするような映像で最後までお客を楽しませるようなつくりになっており、
当時映画館で「これは日本映画史上最高に魅力的なエンドロールなのではないか」と感じたのだが、

奥田民生になりたい〜」(先月見に行った。ダメ男あるあるみたいな映画でした。なんか自分を見てるみたいで辛かったですね....)で評価を爆下げしている大根仁はいまこそあのエンドロールだけでもWeb上に公開すべきではないのか。

[9]君の声(アンダーグラフ


君の声 / アンダーグラフ(full pv)


これめっちゃ名曲なんですよね。

寝ないで書いた世界で僕ら愛をつくりだすんだ
疑えど信じ繰り返す日々で 
掴んで吐いて後に悔やんだ弱さが体のなかでカタチを見つける 
僕らはあの頃そのままでいいと思ってた

ここらへんの畳み掛ける感じ、真戸原さん、本当に天才だと思うんですよね。

てかアンダーグラフの曲ばっかり聴いてる身としては、こんな名曲の宝庫のバンドがあまり知られてないって本当に納得がいかない。
もっと四季とかパラダイムとか純心サイクルとかバースデーシグナルとか白い雨とか遠き日とか聴かれてほしいのである。

[10] Only Holy Story( Steady & Co ft. azumi)

なんか久しぶりに聴くと涙出てくるんですよね。。。
SHIGEOかっけーよ(おれはこんなオッサンになりたかった)。

あとやっぱKjってすごいですね。
ハタチそこそこでこれや「静かな日々の階段を」の詞書いてたって思うとやっぱり普通の人間とは思えない。
藤井四段の受け答えが大人すぎて人生二週目疑惑が各所で浮上しているが、個人的には降谷建志こそ前世の記憶をもつ男だと思う。

Conclusion

いやでもまぁただひたすらアホみたいに頭使わない作業こなすモードのときは、
そりゃキャッハーな感じのうたがいいよね。


ポルカドットスティングレイ「テレキャスター・ストライプ」MV

セプテンバーミー「幽霊ダイブ」MV



Enjoy!