GENZITSU / UsefulMaterials

34 stars 0 forks source link

almost weekly useful materials - 11/16 - #117

Open GENZITSU opened 1 year ago

GENZITSU commented 1 year ago

Token Merging: Your ViT but Faster

facebook researchが発表したViTの推論速度向上手法に関する論文

学習済みViTの推論時に類似パッチをマージすることで精度劣化をに抑えながら最大2倍程度の高速化が可能

入力画像サイズが大きいときほど精度劣化は少ない傾向にある

スクリーンショット 2022-11-09 15 17 32

精度表

学習してる最中からToMeを使うと学習が早くなり、精度劣化を少し抑えられる。

スクリーンショット 2022-11-09 15 19 24

パッチの削減数ごとの精度表
224x224サイズだとr=10くらいから怪しくなってくるが、384x384だとr=23でもなかなか精度劣化が少ない。
とはいえ現実的に使う範囲だとr=8くらいで1.3倍の高速化を狙う感じになるか

スクリーンショット 2022-11-09 15 24 40

ビデオや音声などでも同様の効果を発揮している

スクリーンショット 2022-11-09 15 29 06

定性的な評価

パッチのマージは人間の直感に整合している

スクリーンショット 2022-11-09 15 18 08

マージ方法のablation

スクリーンショット 2022-11-09 15 12 14

コメント

transformer blockには手を加えず入力する系列長を短くすることで推論時間を高速化させるアイデアが良い

また、timmに簡単に組み合わせられるように実装されているのもポイントが高い 現状はtimmで実装されているvit または deitのみに対応しているようなので今後に期待。

スクリーンショット 2022-11-09 15 27 27

出典

GENZITSU commented 1 year ago

SOFT SKILLS 第一部 (キャリア) 要点集

SOFT SKILLSを読んだので重要なところを簡単にまとめておく。

自分のキャリアをビジネスとして扱う

適切なキャリア目標の立て方

社交スキル

良い履歴書の作り方

面接をハックする

専門特化の必要性

出世階段の登り方

プロであること

同僚やボスとの付き合い方

テクノロジーに宗教のように接しない

会社を辞めて自由になる方法

フリーランサーの仕事の始め方

製品を持つアントレプレナーになる方法

リモートワーク

コメント

定期的に読み返したい。 特にプロフェショナルであることは常に意識していきたいところ。

出典

SOFT SKILLS ソフトウェア開発者の人生マニュアル 第2版

GENZITSU commented 1 year ago

10 Ways Managers are Wasting Their Developers' Potential

開発者のポテンシャルを台無しにする10の方法を紹介

  1. 開発者の同意なくステークホルダーとの約束を取り付ける
  2. ソリューションを指定する (提案することも含め)
  3. 開発者に見積もりを減らすように要求する (これは開発者の主体性を著しく低下させる)
  4. 見積もりを約束とみなす (システム開発は常に不確実性を伴う)
  5. 開発者の集中を常にかき乱す
  6. 計画していた仕事に新たに仕事を純増させる (追加の必要がある場合は、何かを捨てる必要がある)
  7. 品質のショートカットを求める
  8. 過度な残業を要求する (生産性を維持したサステナブルな働き方をしなくてはいけない)
  9. 失敗を悪とみなす学ばない。
  10. 手柄を横取りする

コメント

どれもやられるとゲンナリするやつであるが、よく見かけるものな気がする。 逆にこれの反対のことを地道に積み重ねていけば生産性はかなり上がるのだろうか

出典

10 Ways Managers are Wasting Their Developers' Potential

GENZITSU commented 1 year ago

SOFT SKILLS 第二部 (セルフマーケティング) 要点集

SOFT SKILLSを読んだので重要なところを簡単にまとめておく。

セルフマーケティングの基礎

パーソナルブランドの確立

成功するブログの作り方

他者のために価値を生み出すことの重要性

ソーシャルメディアを使ったブランド構築

講師・講演・プレゼンテーション

本や記事の執筆

コメント

やっぱブログって大事なんだなぁ

出典

SOFT SKILLS ソフトウェア開発者の人生マニュアル 第2版

GENZITSU commented 1 year ago

SOFT SKILLS 第三部 (学習) 要点集

SOFT SKILLSを読んだので重要なところを簡単にまとめておく。

学び方を学ぶ

10ステッププロセス

最初の6ステップ (1度限りのステップ)

学習ステップ (繰り返しの3ステップ)

メンターの探し方

メンターになる方法

教えるじちが最高の学習方法となる理由

知識の中の隙間を見つける

コメント

10ステッププロセスという学習方法は早速取り入れてみたい

出典

SOFT SKILLS ソフトウェア開発者の人生マニュアル 第2版

GENZITSU commented 1 year ago

SOFT SKILLS 第四部 (生産性) 要点集

SOFT SKILLSを読んだので重要なところを簡単にまとめておく。

全ては集中から始まる

私の個人的な生産性メソッド

ポモドーロテクニック

生産性を維持するためのクォータシステム

自分に対して責任を取る

並行作業の実害が利益よりも大きい理由

「燃え尽き」の対処

ルーチンを持つことの重要性

分解は生産性を上げる

ハードワークの価値と避けてしまう理由

何でもしないよりした方がマシ

コメント

マインドセット系の話が大半であったが、常日頃から意識しておきたいことばかりである。

出典

SOFT SKILLS ソフトウェア開発者の人生マニュアル 第2版

GENZITSU commented 1 year ago

SOFT SKILLS 第六部 (フィットネス) 要点集

SOFT SKILLSを読んだので重要なところを簡単にまとめておく。 第五部 (資産形成) は特に面白いところがなかったので割愛する。

体が「フィット」していることの利点

フィットネスの目標の設定

モチベーションの向上と維持の方法

コメント

あまり特筆すべきことも多くないので少なめ

出典

SOFT SKILLS ソフトウェア開発者の人生マニュアル 第2版

GENZITSU commented 1 year ago

SOFT SKILLS 第七部 (マインドセット) 要点集

SOFT SKILLSを読んだので重要なところを簡単にまとめておく。

心はどのようにして身体に影響を与えるか

全てはポジティブなマインドセットから始まる

セルフイメージの変え方

失敗を恐るな

ストア哲学によって人生が変わる理由

別れの言葉

コメント

おすすめです。
ソフトウェア開発者にとってはこの上ない自己啓発書だと思います。

出典

SOFT SKILLS ソフトウェア開発者の人生マニュアル 第2版

GENZITSU commented 1 year ago

Flan-PaLMの学習に使われているpromptの手法を使ってAIに褒めてもらう

Flan-PaLMという大規模言語モデルで使用された Instruction finetuning を参考に、AIに効果的に褒めてもらう方法を検証した記事

instruction finetuningとは以下のようなイメージ

スクリーンショット 2022-11-14 16 01 29

以下は実験結果

zero-shot + 命令

スクリーンショット 2022-11-14 16 02 34

例示 + 命令

スクリーンショット 2022-11-14 16 03 17

ただし、ドメインを変更すると打率が下がるらしい

スクリーンショット 2022-11-14 16 04 08

例示 + 命令 + Chain of Thoughts

以下を意識してプロンプトを生成

命令:序盤の場面設定と、私の発言内の「褒めてください」 例示:1つ目の昇進試験の褒め事例 思考の連鎖プロンプト:「わかりました。関連して褒められることを考えて、100文字以上の長文で褒めてみますね」の部分(Let's think step by stepのイメージ)

スクリーンショット 2022-11-14 16 07 44

ジェンダーにちゃんと配慮される文が生成されやすくなり、褒める文字数も増える効果があったとのこと

(おまけ) 大規模言語モデルの特性について

モデルのサイズに応じて性能が線形に伸びる

スクリーンショット 2022-11-14 16 10 14

Chain of Thoughtは60 billion以上のパラメータがあって初めて効果を持つ傾向にある

スクリーンショット 2022-11-14 16 10 42

コメント

最近提案されたprompt手法をまとめて知れて非常に勉強になった。

出典

GENZITSU commented 1 year ago

GitHub Actionsをローカルで実行する(nektos/act)

コメント

出典

GENZITSU commented 1 year ago

勾配ブースティングで「幅を持たせた予測」を行う

LightGBMを用いて区間予測する方法として分位点回帰と事後的な予測誤差の推定を試みている記事

NGBoostというライブラリで区間予測をすることも可能らしいが、こちらは正則化や大規模データへの対応、GPUができないなどの制約がありあまり現実的ではないとのこと。

分位点回帰による方法

メリット: 誤差分布に対する仮定をおく必要がない デメリット: 予測したいα%タイルごとにモデルを作成する必要がある

lightgbmで用意されているquantileを用いることで実現可能で、理論的にはPinBall ossに基づいている

スクリーンショット 2022-11-14 17 08 40

スクリーンショット 2022-11-14 17 08 50

# from https://zenn.dev/joanofarc/articles/gradient-boosting-interval-prediction

lower_quantile = 0.025
upper_quantile = 0.975

predict_dict = {}
for quantile in [lower_quantile, upper_quantile]:
    quantile_params = {
        "objective": "quantile", # quantile を指定することで分位点予測となる。
        "alpha": quantile # alpha には分位点の値を指定する。
    }
    quantile_regressor = lgbm.train(
        quantile_params,
        lgbm.Dataset(x_for_lgbm, y_for_lgbm),
    )
    quantile_predict = quantile_regressor.predict(x_for_lgbm)
    predict_dict[quantile] = quantile_predict

いい感じの予測結果が得られる

スクリーンショット 2022-11-14 17 11 21

事後的な予測誤差の推定

メリット: パーセントタイルごとにモデルを作成する必要がない デメリット:

理論 (誤差に正規分布を仮定した場合)としては以下のような感じ

スクリーンショット 2022-11-14 17 16 26

# from https://zenn.dev/joanofarc/articles/gradient-boosting-interval-prediction

# 次に、分散推測モデルを構築し、分散の推測を行う。
def grad_hess_for_logvar(log_var: np.ndarray, data: lgbm.Dataset):
    '''
    推測された分散対数値に対する損失の一階微分及び二階微分を導出する
    y_pred については引数としてではなくグローバル変数として与えていることに注意。
    '''
    y_true = data.get_label()
    grad = 1/2 - 1/2 * (y_true - y_pred)**2 / np.exp(log_var)
    hess = 1/2 * (y_true - y_pred)**2 / np.exp(log_var)
    return grad, hess

log_var_reg_params = {
    "objective": "regression"
}

log_var_regressor = lgbm.train(
    log_var_reg_params,
    lgbm.Dataset(x_for_lgbm, y_for_lgbm),
    fobj=grad_hess_for_logvar # fobj 引数に自作の grad, hess 導出関数を定義する。
)
# 推測された標準偏差を導出する。
log_var_pred = log_var_regressor.predict(x_for_lgbm)
std_pred = np.sqrt(np.exp(log_var_pred))

これもいい感じの予測結果が出せる

スクリーンショット 2022-11-14 17 17 45

コメント

これだけ見ると使い勝手の良い分位点回帰をつかっちゃいそうだが、こっちは学習に必要なデータがおおいのだろうか?

出典

GENZITSU commented 1 year ago

[CEDEC+KYUSHU]テキストから架空言語のボイスを作り出す手法が解説されたセッションをレポート。意味が分からないからこそ,リアルになる

text-to-speechを活用してゲーム内の異世界言語音声を開発する取り組みが紹介されている。

以下面白かったところの抜粋

背景

ゲームで用いられている異世界言語の開発には言語学に対する深い知識が必要で開発に時間と労力が必要である

架空言語をしっかりと作るには,言語学の専門的な知識に加え,新たな言語体系を組み立てるための膨大な手間が必要になる。これを言語学の知識なしで作り出し,なおかつ,演者の音声を収録するのではなく,プレイした結果に応じてリアルタイムに生成できれば,ゲーム開発において非常に役立つことは間違いない。

現状のTTSの精度はエンタメのカスタマー環境ではやや精度不足、なぜならユーザーの母国語に対する分解能が高すぎるため

ちょっとした不自然さを敏感に感じ取ってしまうのは,それが自分の母語だからという理由が大きい。普段,人間による流ちょうで自然な喋りに慣れているからこそなのだ。

004

005

アプローチ

TTSタスクは言語依存性があるため、通常日本語のTTSには日本語用の音声特徴量変換器(encoder)と音声変換器(vocoder)が必要になるが、あえて、この組み合わせはあべこべにする

007

008

009

010

ここで生成される言語の正解は誰も知らないため、違和感なく受け入れられるという

面白いことに,この英語風架空言語にはテキスト音声合成特有の不自然さを感じることがない。誰にとっても未知の言語であるため,聞き慣れた母語の音声合成を聞く時のような違和感がなく,「そういう言語」として受け取れる。

またこのencoderとvocoderの組み合わせを考えることで、プレイヤーごとのローカライズやゲーム内の方言などを作ることも可能だという。

012

今後

まだ商用化には至っていないようだが、今後インディーズゲームなどでの活用が見込まれそうとのこと

もちろんこの手法は,言語学の知識を用いるような伝統的手法での架空言語作りと置き換わるものではない。しかし,架空言語をゲームに取り入れる場合には,かなり有望な手法であると感じられた。

この手法は現時点で商品化されているわけではないため,導入にどの程度のコストがかかるかは不明だが,個人的には,演者を頼む余裕のない予算の限られたインディーズゲームや,友達とのTRPGセッションなどにおいて,異世界的リアリティを出す際に活用できるぐらい手軽なものを期待したいところだ。

コメント

decoderとvocoderの組み合わせをあべこべにするおいうアプローチが斬新であった。

出典

[CEDEC+KYUSHU]テキストから架空言語のボイスを作り出す手法が解説されたセッションをレポート。意味が分からないからこそ,リアルになる