たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

Gitとブランチモデルとオープンソースと

オープンソースの特徴: ある意味で自分のコントロールが全く効かない.

PR reviewで取りこみの可否や修正は可能.
でも、gitの、logは、制御できない、、、

feature branchをmainへ取りこむflowの場合、gitのログがそのままレポジトリにやってくる.
gitの粒度、コメントの正確さ等はすべてコントリビュータに依存し、さらに修正も非常に面倒.
中には"commit temps"とかでcommitされてる場合だってある(プライベートレポでたまにやりがち)。
制御が不可能な分、それは諦めるしかない.
諦める方針として

  • git logのコメントは利用しない前提
  • 個別commitのlogはsquashのコメントにしまっちゃう

がある。
「変なコメントがありうるから直接コメントは利用しない」が大前提で、
完全に使わないか、でっかくて制御されたコミットにまとめるか、という話。
squash mergeすれば制御可能なPR nameでコメントがつくので制御下にもってこれる.
GitHubならPRタブで各commitがみれるのでこれで代用という考え方も

streamimg IO latency

前提: RTF < 1
sr = n (step/sec)

#

AR: i sec/forward (step)

前提より i < 1/n

streaming_io_latency_ar = forward = i

i (<1/n)

NAR: j sec/forward (batch)
b step/batch => n/b batch/sec

前提より j < b/n

NARはbufferingと切り捨てが可能.
このとき
0<= buffer step <= b
0 <= t_buffer sec/buffer <= b/n

streaming_io_latency_nar = forward + buffer
= j + t_buffer

buffer=0が最速
ただし追加制約として
j < b/n が j < に厳格化

(b-buffer)+1倍 (ちょっと違う)

bufferingすると1/n <= t_buffer
ゆえに latency > 1/n

ARのRTFより必ずARが低遅延

bufferingなしの場合
j < 1/nを前提として i vs j

普通NARの方がモデルデカいので不利

no buffering

i vs j

NARは

Streaming IO latency

語句導入

Streaming IO latency: input-output latency of stream
inputが時間を伴って入ってきて、そこから処理して出力するまでの遅延
バッチ処理をしようとするとbufferingが必要になり、このlatencyが伸びることになる.
わりと制約の大きいlatency

低遅延リアルタイム処理はstreaming IO latencyでよく評価できそう.

声質変換にはいくつかの用途がある.
変換音声の「返し/モニター」を前提にすると低遅延リアルタイム処理が要件にあがる.
c.f.
返しをしない場合の方がシチュエーションとしては多い.
YouTubeとかでライブストリーミングしようとしたら嫌でも数秒遅延するし(映像こみで)バッファリングもかけるため、50msecバッチとかで処理していっても何ら問題がない.

また、Discordで会話みたいなシチュエーションは悩ましいところがある.
c.f. 電話越しの遅延
短いバッチで処理してもいけそうだけど、みたいな微妙なライン.

PyTorchラッパーとCheckpointing

※CoI: PyTorch-Lightning のcontributor (Checkpointing周り) です

比較

wrapper checkpoint local/remote resume/nullable
Catalyst ☑ / □ ☑ / ?
Lightning ☑ / ☑ ☑ / ☑
Ignite ☑ / △ ☑ / ?

△: no direct support, but implementable (handler argument / hook point / BaseClass)

Catalyst

APIs

  • catalyst.utils.checkpoint
    • .pack_checkpoint: 保存対象を引数にしてパック (チェックポイントobj化)
    • .unpack_checkpoint: チェックポイントobjとapply対象を引数にしてunpack
    • .save_checkpoint: チェックポイントobjを指定dir/fileに書き込み (defaultはtorch.saveで保存?)
    • .load_checkpoint: ファイルからチェックポイントobjのread

実装
リモートcheckpointは不可 (os.mkdir使ってる).

PyTorch Ignite

APIs

Checkpoint

Checkpointをインスタンス化するときにSaver (save_handler)を渡す.
contribにリモートへ保存するフックがある...?
ignite.contrib.handlers.trains_logger.TrainsLogger

VTuberは共同幻想だからバーチャルである

芸能人は違う時空の住人か? → 自分と同じ世界に住んでる
アニメは違う時空の住人か? → そりゃあ、その作品世界の人じゃんね
VTuberは違う時空の住人か? → いや、バーチャル界だったりするけど俺らと同じ世界よ

共同幻想とは

参加者が信じるものは実在する
例: イエスキリスト、人間の心、「空気読め」の"空気"

全員があることを前提に動けば、それは事実上/バーチャルに存在する
みんなが共同して信じる幻想、だから共同幻想

(私がこの言葉を知ったのは哲学系じゃなくて小説。トクロンティヌス氏の三呪だったはず。あれは名作)

VTuberをアニメと異にするもの

VTuberとアニメキャラは違う。肌感としてそう感じる

対象について:
ライバーだから? → 動画勢も別にアニメじゃないでしょ
Twitterに住んでるから? → アニメ公式のキャラ垢あるじゃん
世界観の強度? → むむ?

視聴者の認識について:
キャラが生きてるか → アニメキャラもVTuberもそら生きてるっしょ
アニメキャラは私と同じ世界で普通に暮らしてる? → アニメキャラは作品世界で生きてるっしょ
VTuberは私と同じ世界で普通に暮らしてる? → うん。YouTuberも芸能人もそうじゃん?

我々がそれを同じ世界の存在と見ているかが違う.
それは作品そのものの違いじゃなくて、作品の認知の仕方の差である.
視聴者0人のアニメキャラとVTuberがいたら、そこに差は見出せない.

VTuberはこの世に事実上存在する

VTuberは自分と同じ世界に生きてる。
だからTwitterもやってるし、動画も投稿するし、ライブ配信もする。
自分がリプ投げたらリプ返ってくるし、自分が投稿したコメント読み上げるし、自分の思わぬとこで失敗して炎上するし、自分が応援して見続けてた苦労が報われて泣き笑いする。
面識のほとんどない隣の部屋の住人よりよっぽど身近に実在する。
我々がそう幻想するから、VTuberは事実上この世に存在する。

共同幻想を支える力

信徒なき神は存在できない。神は信仰されるからこそ実在する。

VTuberは存在であり、視聴者は徒にあたる。
ただ視聴するのではなく、ライブ配信でチャットし、動画にコメントし、ツイートにリプを投げ、感想をツイートし、ファンアートを作り、スパチャをして、グッズを買い、推す。
そしてその総体がVTuberを変える。
生きて同じ世界に住む存在なのだから、変わって当然。
そして変わるからこそ、同じ世界なのだと認識できる。

VTuber共同幻想だからバーチャルである

VTuberは存在する。
視聴者がそう幻想し相互作用することで、VTuberはより実在していく。
VTuber共同幻想で、だからバーチャルな存在で、そして実在する。

おまけ

VTuberと実況者と生主とYouTuberと芸能人と

変わらない。
VTuberはこの世界に普通に生きてる。
この世の存在がゲームを実況したり歌を歌ったり企画動画を投稿したりテレビに出るのは普通のこと。
だから何も変わらない。
VTuberは事実上この世に存在するから。

素が好まれる

特にライバーは「たまに出る素」がしばしば好まれる。
その理由の1つは、VTuberと視聴者の共犯関係を作るから。
共同幻想を破壊しうる咎を、ここだけの話・わかる人だけのネタとして封じ込める。
決して大っぴらに話してはいけない、私達の(公然の)秘密。
秘密は2者を結びつける。結びつきは存在だ

関連する用語・論

NeuralArticulatorySynthesis

Welcome to the NeuralArticulatorySynthesis wiki!

Past researches

before Deep learning

Robust Articulatory Speech Synthesis using Deep Neural Networks for BCI Applications (2014)

Data driven articulatory synthesis with deep neural networks (2016)

Pink Trombone

Idea

Datasetの保存と圧縮

前提: CorpusとDatasetの分離

Datasetはそんなに長く持つものじゃない
Corpusと違って公開するものでもない
何かあればCorpusからいつでも作り直せる

音声にzipで圧縮したら3割くらい減る
10GBのdatasetをzipで持って-3GB
転送量が減るメリットはある
<= 日にせいぜい数回の転送で3GBけちるとどれくらいのご利益?
=> ¥1/GBくらい。でも同一リージョンのS3-EC2は無料

uncompressed dataset archive (ZIP STORED) で大丈夫そう

統計と機械学習

統計: 確率
機械学習: 手続き

統計 p(x|θ)
機械学習 f(x;θ) & θ ⇦ g(f, X, θ)

統計的機械学習はfがpと関係してるモデル.
確率論に基づいた学習理論が使える (e.g. MLE)

学習ではなく確率モデル汎化誤差の振る舞いに注目する統計学の分野や、確率関係なくヒューリスティックな学習手続きを極める機械学習もある。

機械学習に数理最適化 (argmaxθ f(θ)) が用いられることもしばしばあるけど、lossの最小化やその保証を無視してただ規則的更新を行う機械学習もありうる.
最適解が最高の汎化性能、という保証もないし.