Volo di notte

お勉強の成果メモや日常のこと

夜間飛行へ移行中です

 

シリコンバレー発 アルゴリズム革命の衝撃 - 櫛田健児

著者の櫛田健児さんは、スタンフォード大学の政治学博士とのことで、本書ではアルゴリズムでもビジネスでもなく、政治や社会の切り口から第3次AIブームについて議論されている。

櫛田さん自身、日本とシリコンバレーをつなぐ仕事をされているようで、いくつか日本語の資料をネットで見つけることができる。いずれもシリコンバレーと日本のビジネス社会および会社文化の比較が主な内容となっており、シリコンバレーの新陳代謝の盛んな環境で生まれる技術を旧態依然とした日本大企業へ取り込む接点をどう作っていくかに関心がある様子。

(セミナータイトルから言って、おそらく3つめのセミナーが本書の下敷きになっていると思われる)

そういった背景を確認して本書を見ると

1章目:
シリコンバレーで生まれる革新的ビジネスモデルの例(Uber, airbnbなど)と、それを可能にした技術・設備投資の特徴
2章目:
パソコン、ビッグデータクラウド、AIというここ20年で並んできたブームキーワードはコンピュータ処理能力のコモディティ化であり、AIの出現によってアルゴリズムを作るというところまでコモディティ化してきているという時代の流れ
3章目:
今後進んでいくアルゴリズム生成のコモディティ化(≒自動化)に必要なものは、データであることから、データを取得できるようにする「できる化」(IoT)をどれだけ取り組んだかでビジネスの勝ち負けにつながることを説き、さらに、それをどれだけ早く製品に適用できるかが勝負になってくるということを提言
(市場に出回っているものを後からアップデートすることも含み、それを可能にするリッチなハードウェア搭載も戦略の一つ)
4章目:
2章目のコンピュータ処理能力のコモディティ化による副産物としてFintechも同様に世界が変わる動きとしてあることを紹介
5章目:
3~4章のような変化による果実を日本企業が手にしていくために、日本の、会社の組織あるいは政治、社会が変化する必要がある部分の提案

という流れになっています。

私自身、年齢的にも会社組織を変えられるほどのポジションにはいないので読後の無力感は否めませんが、欧州留学時に技術者の卵がこういった話を(技術者なのに)するような授業も受けています。20年前以上前の本ですが、Japanese Negotiatorにあるような浪花節が上位に来る会社文化から、そろそろ脱皮するような時期に来ているのかもしれません。

The Japanese Negotiator: Subtlety and Strategy Beyond Western Logic

The Japanese Negotiator: Subtlety and Strategy Beyond Western Logic

(アメリカも40年前は浪花節的な会社文化だったそうで、日本にコテンパンにされた1980年代から90年代に今の形に変わっていったそうです)

FFTと窓関数の効果

chachay.hatenablog.com

先日FFTのエネルギーについて記事を書いたところ、 その内容を山岡さんに取り上げていただき面白い検証につながり大変楽しく読ませていただいています。

tadaoyamaoka.hatenablog.com

この中で周波数とパワースペクトルと、そしてビンの関係を考察してしていらっしゃいます。

具体的には「ピークの周波数の周辺のパワースペクトルの和がエネルギー(全周波数のパワースペクトルの総和)に占める割合」を求めていますが、拝見したところスペクトル漏れが起きているように見受けられます。

山岡さんの検討にハミング窓を加えるとスペクトル漏れが低減できるというのを示します。

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
fs = 44100
size = 4096
t = np.arange(0., size) / fs
frq = np.fft.fftfreq(size, 1./fs)

fset = np.linspace(400, 500, 1001)
range = [1, 3, 5]

hammingWindow = np.hamming(size)
range = [1, 3, 5]
for r in range:
    peaks = []
    for f in fset:
        y = np.sin(2 * np.pi * f * t)*hammingWindow
        Y = np.fft.fft(y)
        P = abs(Y[0:size/2])**2
        P_around = np.convolve(P, np.ones(r), 'valid')
        peaks.append(max(P_around) / sum(P))
    plt.plot(fset, peaks)
plt.axis([400, 500, 0, 1.1])
plt.show()

Before 窓関数なし(オリジナルの結果)

f:id:Chachay:20160901233229p:plain

After ハミング窓あり

f:id:Chachay:20160901232502p:plain

青 ピーク値 緑 ピークとサイドビン2個の和 赤 ピークとサイドビン4個の和

ここで周辺和を取らない結果が悪くなるのは、もう離散化の具合の話でそこはスペクトルの裾の広さに現れてしまうのは、昨日のエントリーの通りです。

参考

窓関数の理屈については、こちらが参考になると思います。

また、離散信号の扱いはスター変換など色々あるんですが、 私の出自が制御屋周辺なので、乱暴にいうとこの辺あたりから、 放浪の旅が始められるんではないかと感じました。

差し出がましながら、ここまで。

FFTピーク値とエネルギーの件

山岡さんのブログでFFT結果のピーク値使用の注意がありました。

tadaoyamaoka.hatenablog.com

こちらでは主に音声ファイル44.1kHzのファイルフォーマットとラの音440Hzを中心に考察されていましたが、機械系の開発でもFFTを使うことがあり示唆に富んだ内容であるように思います。

具体例として、440Hzのサイン波と435Hzのサイン波のピーク値が

周波数 ピーク値
440Hz 1999.5
435Hz 1527.2

と1.3倍の開きがあり、サンプリング周波数の影響が出ているということを示されています。 具体例として機械部品の共振試験を実施した結果に読み替えると、サンプリング周波数を無視して、試験結果のピーク値を読んで共振倍率を求めると痛い目にあうということです。

山岡さんの結果をそのまま使わせていただくと、最悪1.57倍 負荷を過小評価してしまう。

これを防ぐためには実際に周波数ドメインの振動を評価する際に、エネルギーの考え方を持ち込む必要があります。まず、スクリプトをお借りして、435Hzと440HzのFFT結果を並べます。

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

# Sampling Rate
fs = 44100

# Sample Size
size = 4096
t = np.arange(0., size) / fs
frq = np.fft.fftfreq(size, 1./fs)

# 440Hzのサイン波をFFT
f = 440
y = np.sin(2 * np.pi * f * t)
Y = np.fft.fft(y)

# 435Hzのサイン波をFFT
f2 = 435
y2 = np.sin(2 * np.pi * f2 * t)
Y2 = np.fft.fft(y2)

# プロット
plt.plot(frq, abs(Y))
plt.plot(frq, abs(Y2))
plt.axis([300, 500, 0, 2500])
plt.show()

f:id:Chachay:20160828144131p:plain

ごらんの通り440Hz(青)と435Hz(緑)で裾の広がり方が違います。 44.1Khz ÷ 周波数の値がより整数に近い440Hzの方がピークがはっきり出ている結果になっています。

これはフーリエ変換を離散化するとつきまとうものですが、 FFTがユニタリ変換なので簡単に(変換前後の)エネルギーの保存を確認できます。

で、それぞれのエネルギーを求めるのは簡単で下記のとおり、

E1 = np.conj(Y)*Y
E2 = np.conj(Y2)*Y2

TTL1 = sum(E1)
TTL2 = sum(E2)

この結果、それぞれの水準でのエネルギーは

周波数 エネルギー値
440Hz 8403716
435Hz 8403443

と、ほぼ一致します。周波数そっくりさんですしね。 (弱冠440Hzの方が大きいのは周波数が高い分、もともと波のエネルギーが高いのです)

当初懸案だったピーク値のような差が大きくなく、評価としてよりロバストだと言えそうですね。

では、ここから、どうやってピーク値を求めるかというと、単純なものから学術的なものまでいろいろあるそうです。入り口としてリンクだけおいておきます。

では!