かずきち。の日記

サーバサイドエンジニアのつぶやき

ニューラルネットワークも作れちゃう?Googleスプレッドシートで自動で反復計算を行わせて、自動化の磨きをかけよう!

Googleスプレッドシート便利ですよね?

オンラインで完結して、パソコンを開いておく必要なんかなくて、Googleが全部自動でしてくれる。
FOR①文で計算した結果をFOR文②で回して、FOR文①でもう一度回すみたいなことがエクセル系は苦手です。
そうなって来るとマクロを組むのか?とかいろいろ考えてしまいますが…
Googleスプレッドシート単体の機能で解決しましょう。

Googleスプレッドシートの設定は簡単です。

まず反復計算を行わせたいファイルを開きます。
そこの配下に「Googleスプレッドシートの設定」ってありますよね?

f:id:kazukichi_0914:20200815103227p:plain

このボタンを押すと反復計算をオンにできて、プログラミングで言う再帰関数のようなことができます。

f:id:kazukichi_0914:20200815103531p:plain

再帰関数とは聞き慣れない言葉ですよね?
簡単に説明しますね。

自分自身を呼び出す関数を再帰的 (recursive) であると呼び、再帰的な関数のことを再帰関数 (recursive function) と呼びます。 また再帰的に関数を呼び出すことを再帰呼び出し (recursive call) と呼びます。

なんです。
高校時代にフィボナッチ数列とか習いませんでしたか?

f:id:kazukichi_0914:20200815104037p:plain
引用:
https://ja.wikipedia.org/wiki/%E6%BC%B8%E5%8C%96%E5%BC%8F#:~:text=%E6%95%B0%E5%AD%A6%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E6%BC%B8%E5%8C%96%E5%BC%8F,%E5%AE%9A%E3%82%81%E3%82%8B%E7%AD%89%E5%BC%8F%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82&text=%E6%BC%B8%E5%8C%96%E5%BC%8F%E3%82%92%E8%A7%A3%E3%81%8F,%E3%82%92%E5%BE%97%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E3%81%84%E3%81%86%E3%80%82

ある数列のn番目の項を計算するためにn-1、n-2番目の項を使用して再計算するってやつです。
手作業で5項目とかまでな頑張ればできますけど、1000 項目とか手作業で求めたくないですよね?
循環参照を含む場合に何回まで再計算を行うかGoogle側に指示を出せるわけです。

ja.wikipedia.org
引用:
https://ja.wikipedia.org/wiki/%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF#:~:text=%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF%EF%BC%88%E3%81%9F%E3%81%9F%E3%81%BF%E3%81%93%E3%81%BF%E3%80%81%E8%8B%B1%3A%20convolution,%E5%80%A3%E3%81%84%E3%82%B3%E3%83%B3%E3%83%9C%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E3%82%82%E5%91%BC%E3%81%B0%E3%82%8C%E3%82%8B%E3%80%82


畳み込みニューラルネットワークはエクセルでも頑張れば計算ができますが、再帰ニューラルネットワークは計算量が莫大になります。

f:id:kazukichi_0914:20200815104934p:plain
引用:
https://lionbridge.ai/ja/articles/neural-network-cnn-rnn/

nをどこまで増やせばいいんだってなります。

f:id:kazukichi_0914:20200815105205p:plain
引用:
https://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%A9%E3%83%AB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF

高校数学なんかは比較的計算式が一方通行で一回の計算で完結するんです。
でも実際の社会問題なんかは「一度、こうなんじゃないか?」っていう仮説を立てて、これをまた同じ事象に当てはめて検証してという作業をします。
そういった作業がGoogle上でもできます。

Googleの反復計算は時間指定

パソコンの Google スプレッドシートで、スプレッドシートを開きます。
[ファイル] 次に [スプレッドシートの設定] 次に [計算] の順にクリックします。
次の設定を選択します。
再計算: 特定の数式の更新頻度を設定します。
反復計算: 循環参照を含む数式の実行回数を設定します。
[設定を保存] をクリックします。
スプレッドシート外部からデータを読み込む関数の再計算頻度は次のとおりです。

ImportRange: 30 分ごと
ImportHtml、ImportFeed、ImportData、ImportXml: 1 時間ごと
GoogleFinance: 最大 20 分ほど遅延する場合がある

引用:
https://support.google.com/docs/answer/58515?co=GENIE.Platform%3DDesktop&oco=1

1分に1回再帰計算しろとか設定するとさすがに怒られますけど
ある程度は許容して実行してくれます。
もしもスプレッドシートで相互作用ニューラルネットワークなんか実装してみたい方はぜひお試しください。