GENZITSU / UsefulMaterials

34 stars 0 forks source link

weekly useful materials - 03/02- #90

Open GENZITSU opened 2 years ago

GENZITSU commented 2 years ago

TransformerモデルへのMC Dropoutの適用

学習時だけではなく推論時にもドロップアウトを利用することで、予測の確実性を見積もる手法の実装記事。

ブログ中では20newsという英語の文書分類タスクに対してドロップアウト確率を0.5と高めに設定して実装を行っている。

ちなみに回帰問題のCO2データセットでは0.1~0.2を設定していたので、問題設定やモデルによって調整が必要なのかもしれません(このあたり、まだちゃんと理解できていないです・・・)

# from https://www.ai-shift.co.jp/techblog/2518

import torch.nn as nn
from transformers import AutoModel

class News20Model(nn.Module):

    def __init__(self):
        super(News20Model, self).__init__()
        GCF.CONFIG.dropout = 0.5
        GCF.CONFIG.output_hidden_states=True
        self.transformer = AutoModel.from_pretrained(
            GCF.MODEL_NAME,
            config=GCF.CONFIG,
        )
        self.classifier = nn.Linear(GCF.CONFIG.hidden_size, n_classes)

    def forward(self, input_ids, attention_mask, target=None):
        outputs = self.transformer(
            input_ids,
            attention_mask=attention_mask,
        )
        h = outputs['last_hidden_state'][:, 0, :]
        h = self.classifier(h)
        if target is not None:
            loss = nn.CrossEntropyLoss()(h, target)
        else:
            loss = None
        return loss, h

スクリーンショット 2022-02-21 22 58 35

このモデルで普通に学習させた後に、model.eval()をせずに、100買い推論を行い最頻値の値がどれくらい出たかで確信度を見積もっている

スクリーンショット 2022-02-21 22 59 41

コメント

元々は回帰問題に対する確信度を見積もるための手法だったらしいが、分類にもある程度使えそう。
仮にマルチラベルとかで各深度を見積もる場合は、複数回やった予測分布の平均からの乖離みたいなのを指標として用いればいいのだろうか?

そしてどうやらタスクによって絶大な効果をもたらすらしい。

以前産学連携における音声分類タスクでこのMC Dropoutが絶大な効果を発揮し、何か他のモデル/タスクにも応用できないかと考えたのが本記事を書くきっかけ

出典

元記事

GENZITSU commented 2 years ago

【🛰MScup】超解像コンペで11位だったけど,やったことまとめまくる

solafuneというプラットフォーム上で開催された衛生画像の超解像コンペの11解法の共有。

要点のみ抜粋

このコンペの当時ではSwinIRというSwin transformerによる超解像モデルが圧倒的に強かったらしい。
最終的な開放は5つのモデルのSeed averaringとTTAの合わせ技を行ったとのこと。

スクリーンショット 2022-02-21 23 35 28

回転のAugmentationを加えるとノイズになる エッジの再現性が重要となる超解像タスクでは,回転後のギザギザがノイズになってしまう. 初めて知ったけど, 超解像タスクでは90度単位での回転が基本動作.画像見比べてなるほどってなった. これは最初気づかなくて,エッジがめちゃくちゃ鈍った画像が生成されたので分析した結果わかったことです.

超解像時にエイリアシングが起きたとき,エッジの向きに再現性がない スクリーンショット 2022-02-21 23 38 01

結果行き着いた発想が,「エッジに対してLossを計算してしまえばいいじゃない??」でした. 実装上は,Sobel Filterをかけて,エッジ抽出された画像に対してSmooth L1 Lossを計算するように計算しました.

# from https://yuta0306.github.io/mscup-feedback

class MeanSobelError(nn.Module):
   """
   Sobel Gradient Loss Function
   """
   def __init__(self,
      normalized: bool = True,
      eps: float = 1e-6,
      reduction: str = 'mean',
   ):
      super(MeanSobelError, self).__init__()
      self.filter = kornia.filters.Sobel(
         normalized=normalized,
         eps=eps,
      )
      self.lossfn = nn.SmoothL1Loss(reduction=reduction)

   def forward(self,
      y_pred: torch.Tensor,
      y_true: torch.Tensor,
   ):
      filtered_pred = self.filter(y_pred)
      filtered_true = self.filter(y_true)

      loss = self.lossfn(filtered_pred, filtered_true)
      return loss

ちなみにsobel filterというのは画像の畳み込みをうまく利用することでエッジ情報を抽出する手法のこと。参考

スクリーンショット 2022-02-21 23 40 31

コメント

回転させた時の情報損失が大きいことを初めて知った。 domain randomization的に学習用画像を大量生成するときに注意した方がいいところかもしれない。
またエッジ情報をより見るようにする、ロストしては、ピクセルに対する重み付けというアプローチもあるかもしれない。
衛生画像の建物セグメンテーションとかだと、建物境界付近のロスへの重みを増やして学習させるとかよくやるので。 (今回は、衛生画像オンリーなので、これはできないが、sobel filterを用いて重み付をするとかはできたかも、というか上の手法だと勾配が本当に流れているのかが不明...)

出典

元記事

GENZITSU commented 2 years ago

AI-synthesized faces are indistinguishable from real faces and more trustworthy

AIで生成された顔写真の画像は、本物の顔写真画像よりも、より「信用できる人」とみなされる傾向があるという報告。

Our evaluation of the photorealism of AI-synthesized faces indicates that synthesis engines have passed through the uncanny valley and are capable of creating faces that are indistinguishable—and more trustworthy—than real faces.

StyleGAN2で生成された顔写真を元に以下3つの実験をしている。

  1. 本物か動画を人に見分けてもらう実験

    315 participants classified, one at a time, 128 of the 800 faces as real or synthesized.

スクリーンショット 2022-02-22 0 01 29

写真に写っている人種や性別によって正解率が変化したとのこと

For real faces, mean accuracy was higher for male East Asian faces than female East Asian faces and higher for male White faces than female White faces. For both male and female synthetic faces, White faces were the least accurately classified, and male White faces were less accurately classified than female White faces. We hypothesize that White faces are more difficult to classify because they are overrepresented in the StyleGAN2 training dataset and are therefore more realistic.

  1. 本物か動画を人に見分けてもらう実験 with FeedBack 一枚一枚の回答後に正解かどうかを伝えてから見分けてもらった場合。

多少正解率は上がったものの、見た目上ほとんど欠陥がない人工画像もあるので、なかなか難しいとのこと

When made aware of rendering artifacts and given feedback, there was a reliable improvement in accuracy; however, overall performance remained only slightly above chance. The lack of improvement over time suggests that the impact of feedback is limited, presumably because some synthetic faces simply do not contain perceptually detectable artifacts.

  1. 人工画像と本物の画像とでどちらが信頼に足る人物と判断するかの実験

スクリーンショット 2022-02-22 0 06 47

Although a small effect, Black faces were rated more trustworthy than South Asian faces, but, otherwise, there was no effect across race. Women were rated as significantly more trustworthy than men,

A smiling face is more likely to be rated as trustworthy, but 65.5% of our real faces and 58.8% of synthetic faces are smiling, so facial expression alone cannot explain why synthetic faces are rated as more trustworthy.

コメント

そのうち証明写真を作るノリで、自分の画像をganに取り込ませて、盛れた写真や面接受けのいい写真などに修正してくれるみたいなアプリが出てきそうな感じがする。

出典

元論文

GENZITSU commented 2 years ago

恋愛ゲームに“本物のAI”登場 rinna社の人工知能に恋できる

AI事業を手掛けるrinna社(東京都渋谷区)は2月22日、恋愛ゲーム「プラスリンクス ~キミと繋がる想い~」(DMM GAMES)に同社の対話AIを搭載したキャラクター「足繁逢(あししげくあい)」が実装されたと発表した。作中では、プレイヤーがチャットで話しかけると、足繁逢がリアルタイムに応答する。

プラスリンクスは、登場キャラクターとチャットをしながら進めるアドベンチャーゲーム。足繁逢には、rinna社の構築済みAIモデルにキャラクターの性格や口調を追加学習させた「STCモデル」を搭載。プレイヤーに対する反応をAIが自動生成する。

 STCモデルの出力した文章に合わせて、キャラクターの表情やチャット上の記号などを最適化するAI「Classifierモデル」と組み合わせることで最終的な演出を確定する。

スクリーンショット 2022-02-23 21 27 03

ちなみにSTCモデルとは、rinna社が提唱しているstyle transfer conversationという手法で以下の図のようなことをしているとのこと。(参考)

スクリーンショット 2022-02-23 21 30 21

コメント

一昔前にこれと同じようにAI彼女と会話ができるゲームがリリースされて、レスポンス速度が遅くて、蓋を開けてみたら実は中身が人力だったという話があったが、今回は100% AIでリリースするのだろうか?

今後の続報が気になる。

出典

元記事

GENZITSU commented 2 years ago

総務省、「AIを活用したSaaS」の情報開示指針を策定 AIの精度など106項目

総務省は2月15日、クラウドサービス事業者に対する情報開示の指針「クラウドサービスの安全・信頼性に係る情報開示指針」に、新たにAIを活用したSaaSやASP(アプリケーション・サービス・プロバイダ)に関する指針を追加したと発表した。

AIを使ったSaaSやASPを巡る指針では、セキュリティや災害対策の状況に加え、AIの精度や今後の精度向上に向けた施策の有無など、計106の項目を開示するよう新たに定めた。総務省は今後も必要があれば項目を更新する方針。

クラウド事業者向けにセキュリティやログ取得、災害への対策状況などを公開するよう定めており、IaaS・PaaS編に加えて「医療情報を扱うSaaS・ASP編」「IoT機器を使ったSaaS・ASP編」などの指針を公表している。ただしいずれも努力目標としており、情報を開示しない場合の罰則などは設けていない。

106項目もあるが、大部分は一般的なサービスであれば情報公開して然るべきものからなる。 (会社の代表の名前とか、サービスの提供時間とか)

AIに特徴的な項目は以下

スクリーンショット 2022-02-23 22 00 38

スクリーンショット 2022-02-23 22 01 01

スクリーンショット 2022-02-23 22 01 16

コメント

追過学習の有無などについては、事前に握っておかないと、後からトラブルになりそうなので、確かに情報開示しておくメリットがありそう。
努力義務とはいえ、AIの性能が出る環境条件を示しておいた方が良いというのは、なかなかきついかもしれない。

出典

元記事

総務省のリンク

GENZITSU commented 2 years ago

5th place solution, poisson blending,detection and tracking

オニヒトデコンペのbestfitting氏の5位解法。

データセットサイズやオニヒトデの画像が少ないことから、copy paste augmentation + poisson blendingという手法を用いて、学習データの増強を行っている。

As the dataset is relative small, if we have more samples we can benefit from them. We can generate more star fishes and put them in different under-sea images.

スクリーンショット 2022-02-24 0 27 40

この解法では、poisson blendingを行った後の画像が本物かどうかを判別するモデルを学習させて、本物と見間違えた画像1.4K枚を学習に加えることで精度の向上に寄与したという。

本物かどうかを判別するモデルは、実際のトレーニングデータをreal, poisson blendingで作成した画像をfakeとして学習させたとのこと。

ちなみに、poisson blendingというのはPoisson Image Editingという論文で提案された、2つの画像をいい感じにマージするCV技術のことで、このgithubを使ったらしい。

マージに必要なmask画像はbbox全体を用いたとのことである。

スクリーンショット 2022-02-24 0 32 36

コメント

poisson blending ベースの copy paste + 真贋判定というパイプラインはかなり汎用的なアプローチな気がする。

出典

元記事

GENZITSU commented 2 years ago

nyanp/ttimer

kaggleのGM nyanpさんが公開した処理時間計測ツール。

pip install ttimerでインストール可能で以下のように使用することが可能で、timerの入れ子構造をサポートしているのが特徴的。

# from https://github.com/nyanp/ttimer

>>> from time import sleep
>>> from ttimer import get_timer

>>> timer = get_timer(timer_name="my timer")

>>> with timer("a"):
>>>     sleep(0.1)
>>>     for _ in range(10):
>>>         with timer("b"):
>>>             sleep(0.01)
>>> with timer("b"):
>>>     sleep(0.1)

>>> print(timer.render())

path      count      time    own time    cpu time    own cpu time
------  -------  --------  ----------  ----------  --------------
a             1  0.203831    0.100531    0.001314        0.000784
└── b        10  0.103299    0.103299    0.00053         0.00053
b             1  0.103603    0.103603    8.2e-05         8.2e-05

>>> print(timer.render(flat=True))

path      count      time    own time    cpu time    own cpu time
------  -------  --------  ----------  ----------  --------------
a             1  0.203831    0.100531    0.001314        0.000784
b            11  0.206903    0.206903    0.000612        0.000612

ちなみに明示的に名前を付けているTimerはすべてスレッドローカルな変数となっており、localなタイマーを使用したい場合は以下のようにインスタンス化する必要があるとのこと。

All named timers are stored as a thread-local variable, and you can use get_timers to enumerate the stored timers. If you do not prefer global (thread-local) variables, you can simply create a local Timer instance. In this style, if you use a decorator, you should pass the timer you created as an additional timer keyword argument.

# from https://github.com/nyanp/ttimer

from ttimer import Timer, timer

t = Timer()  # local timer

@timer()
def foo(a: int):
    pass

with t("a"):
    foo(a=1, timer=t)  # additional "timer" keyword argument are used to specify the context

コメント

profilerを持ち出すほどではない時に有用そう。

出典

元github

GENZITSU commented 2 years ago

開発速度が速い #とは(LayerX社内資料)

開発速度が高い ということは機能開発の速度が早いのではなく、顧客への価値提供が早いことを指す。

この顧客への価値提供速度最大化するためには以下のことが必要。

スクリーンショット 2022-02-24 23 42 53

スクリーンショット 2022-02-24 23 43 01

スクリーンショット 2022-02-24 23 43 10

コメント

金言である。胸に刻みたい。

出典

元記事

GENZITSU commented 2 years ago

Getting Started with PyTorch Image Models (timm): A Practitioner’s Guide

timmを完全に使いこなすための解説記事。

スクリーンショット 2022-02-24 23 48 20

コメント

既知の事項も多いものの、分量が半端ないので、辞書的に使えそう。

出典

元記事

GENZITSU commented 2 years ago

AI電話サービスを活用した認知機能チェックに関する連携協定を締結

株式会社ディー・エヌ・エーの子会社である日本テクトシステムズ株式会社(以下、日本テクトシステムズ)は、日本テクトシステムズが持つ認知機能チェック技術と株式会社NTTドコモ(以下、NTTドコモ)が持つ対話型AIの技術を活用し、電話による認知機能チェック(以下、本ソリューション)を図ることで、高齢化に伴う社会的課題、ヘルスケアに関する課題解決をめざす「AIを活用した電話応対業務の自動化に関する連携協定書」(以下、本協定)をNTTドコモと2022年2月24日(木)に締結しました。

 本協定では、日本テクトシステムズが提供する音声で判定する認知機能チェックツール「ONSEI」と、ドコモが提供する電話応対自動化サービス「AI電話サービス」を連携し、電話でAIと会話をすることによって、認知機能をチェックできるサービスの提供をめざします。これにより、利用者は電話を掛ける/受けるだけで認知機能の確認ができます。高齢者の認知機能確認、高齢者運転免許更新時の認知機能事前チェック、企業における従業員のヘルスケア確認などのユースケースで効果検証を進めてまいります。

スクリーンショット 2022-02-25 21 43 02

 日本テクトシステムズは、「穏やかに過ごして行ける社会のために」を目指し、「~for peaceful aging~」をコーポレートメッセージに掲げ、前身企業時代から20年以上培った、医療、とくに認知症分野での多岐にわたる知見とICT技術を活かして開発した認知機能検査実施支援システム等を全国の医療機関向けに提供しています。 画像診断装置用プログラム「MRI-TAISEKI」の医療機器認証取得(医療機器認証番号:303AIBZX00004000)や、高齢者運転免許更新時等の認知機能検査に於けるタブレットによる実施~採点~管理システム「MENKYO」、20秒の音声で判定する認知機能AIチェックツール「ONSEI」など他にはないアプローチで社会問題である認知症に対峙する医療ICTベンチャー企業です。

コメント

自動音声応答を用いた面白い試み。googleの自動音声案内で営業時間を調べるやつに似た可能性を感じる

出典

元記事

GENZITSU commented 2 years ago

本番環境での機械学習モデルの監視について (2/3)

機械学習システムに混入する異常入力を4つのケースに分けて、その発生原因・効果的な対処方法が述べられている記事。

コメント

勉強になる

出典

元記事

GENZITSU commented 2 years ago

WorksApplications / SudachiTra

WorksApplicationsから国語研日本語ウェブコーパス (NWJC) に対してsudachiを用いて分かち書きを行い、事前学習を行ったBertモデルが公開された。
ライセンスは商用フリー。

スクリーンショット 2022-02-25 22 25 53

以下のように簡単に使用することができる。

$ pip install sudachitra
$ wget https://sudachi.s3.ap-northeast-1.amazonaws.com/chitra/chiTra-1.0.tar.gz
$ tar -zxvf chiTra-1.0.tar.gz
# from https://github.com/WorksApplications/SudachiTra

>>> from sudachitra.tokenization_bert_sudachipy import BertSudachipyTokenizer
>>> from transformers import BertModel

>>> tokenizer = BertSudachipyTokenizer.from_pretrained('chiTra-1.0')
>>> tokenizer.tokenize("選挙管理委員会とすだち")
['選挙', '##管理', '##委員会', 'と', '酢', '##橘']

>>> model = BertModel.from_pretrained('chiTra-1.0')
>>> model(**tokenizer("まさにオールマイティーな商品だ。", return_tensors="pt")).last_hidden_state
tensor([[[ 0.8583, -1.1752, -0.7987,  ..., -1.1691, -0.8355,  3.4678],
         [ 0.0220,  1.1702, -2.3334,  ...,  0.6673, -2.0774,  2.7731],
         [ 0.0894, -1.3009,  3.4650,  ..., -0.1140,  0.1767,  1.9859],
         ...,
         [-0.4429, -1.6267, -2.1493,  ..., -1.7801, -1.8009,  2.5343],
         [ 1.7204, -1.0540, -0.4362,  ..., -0.0228,  0.5622,  2.5800],
         [ 1.1125, -0.3986,  1.8532,  ..., -0.8021, -1.5888,  2.9520]]],
       grad_fn=<NativeLayerNormBackward0>)

Amazon Review Corpusに対してファインチューニングを例に撮った解説記事もあり、だいたい6割程度の正解率となっている(※参考)

コメント

sudachiはmecabよりもトークナイザーとしての使用感が良いイメージがあるので、事前学習モデルの精度にも期待がもてる。

出典

github

GENZITSU commented 2 years ago

nebuly-ai / nebullvm

OpenVINO, TensorRT, TVMといった様々な深層学習モデルの最適化を簡単に実行することができるライブラリ。

pytorch, tensorflow, haggingface(coming face)のライブラリを以下のような使用感のようで最適化が可能。

# from https://github.com/nebuly-ai/nebullvm

>>> import torch
>>> import torchvision.models as models
>>> from nebullvm import optimize_torch_model
>>> model = models.efficientnet_b0()
>>> bs, input_sizes = 1, [(3, 256, 256)]
>>> save_dir = "."
>>> optimized_model = optimize_torch_model(
...     model, batch_size=bs, input_sizes=input_sizes, save_dir=save_dir
... )
>>> x = torch.randn((bs, *input_sizes[0]))
>>> res = optimized_model(x)

ただし、手元の環境でインストールしようとしたらnebullvm==0.1.1とnebullvm=0.1,0が矛盾して使用することができなかった。

コメント

今後に期待

出典

github

GENZITSU commented 2 years ago

p値を用いたTarget Encoding

界隈で話題になっている記事。 target encodingを行う際に、クラス数が少ない場合encoding結果が信頼できない問題があり、これまではadaptive smoothingなどのテクが用いられていたが、ここにp値を用いることで、atmaCup13でスコアが改善したことが報告されている。

計算は以下のように行うが、連続修正というものを使うことでより適切な値になるのだとか

スクリーンショット 2022-02-25 23 06 16

スクリーンショット 2022-02-25 23 07 44

コメント

target encodingの派生系は色々あるらしいので、また勉強してみたい。 TargetEncodingのスムーシング

出典

元記事

GENZITSU commented 2 years ago

A brief timeline of NLP from Bag of Words to the Transformer family

Bag of Wordsから近年のBERTの進化系までが完結にまとめられている。

スクリーンショット 2022-02-25 23 25 59

コメント

ここ最近の進化の系譜を振り返るのにちょうどよい。

出典

元記事

GENZITSU commented 2 years ago

Icicle Charts in Python

コンサルとかでよく見る、以下のようなグラフを描画するためのメソッドがplotlyに追加されたようだ。

スクリーンショット 2022-02-25 23 34 16

スクリーンショット 2022-02-25 23 34 04

コメント

どっかで使えそう。

出典

元記事

GENZITSU commented 2 years ago

Vertex AI Matching Engineをつかった類似商品検索APIの開発

GCPが提供するマネージドなベクトル検索エンジン、Vertec AI Matching Engineを採用した経緯などがまとめられている。

オープンソースなFaissはベクトルに対応するIDの生成に制約があるため、Faiss用のIDと自社内でのIDのマッピングを管理する必要がでてくるのだが、このIDは頻繁に更新されるため結構な頻度で障害につながっていたとのこと。

Mathinc Engineでは idに任意のな UTF-8 文字列を使えるため、マッピングの管理が必要なくなり、これだけで障害耐性が向上。 さらにダウンタイムなしでindexのアップデートを行う機能も有しているということで、自社でベクトル検索エンジンを運用するよりもはるかに高機能なものがつかえるという。

コメント

メモ

出典

元記事

GENZITSU commented 2 years ago

Should You Mask 15% in Masked Language Modeling?

[✅] MLMs trained with 40% masking can outperform 15%. [✅] No need for making with 80% [MASK], 10% original token and 10% random token. [✅] Uniform masking can compete with {span, PMI} masking at higher masking rates.

BERTの事前学習時のMASK確率を15%から40%に引き上げることで、言語モデルの性能が向上することを示した論文。

スクリーンショット 2022-02-26 23 50 50

ただし、80%マスキングした言語モデルでも各種タスクで性能を保持している傾向があり、これは黄色信号な気がしている(感想)

スクリーンショット 2022-02-26 23 47 40

またBERTのマスキング手法にはいくつかの流派があったが、シンプルな一様サンプリングベースのマスキングでも十分に性能が出ることを示した。

FLt3uETWUAAP5JS

コメント

BERTの事前学習のマスク確率が一種のハイパラだったというのは意外だ。

出典

元記事

GENZITSU commented 2 years ago

pytorchで分散学習を行う際の注意点

DataLoader作成時にDistributedSamplerを指定し、かつdrop_lastをTrueにしておかないと、重複サンプリングが発生するとのこと。 安全に使うにはpytorch 1.8以上が良さそう

PyTorch DDP(分散学習時)で、DataLoader作成時にDistributedSamplerインスタンスを指定しないと各プロセス(GPU)に全サイズのデータセットが行っちゃうん?

これ実際に調べたけどYesだったな。 DistributedSamplerを指定しない場合二つのプロセスに同じサンプルを送っている(1枚目) 指定すると重複しないようプロセスごとに分割しておくっている(2枚目) ということでDistributedSamplerを指定し忘れると2重に学習してることになるとさ

重複してサンプリングされるのを防ぐにはDistributedSamplerのオプションでdrop_last=Trueにする。分散学習じゃないときのDataLoaderのdrop_lastと同様。ただし、DistributedSamplerにdrop_lastオプションが追加されたのはPyTorch 1.8.0以降

コメント

メモ

出典

元ツイート

GENZITSU commented 2 years ago

エンジニアも知っておきたいAI倫理のはなし

AI倫理が問われた事例の紹介や世界各国の動向が完結にまとめられた資料。

スクリーンショット 2022-02-27 20 33 01 スクリーンショット 2022-02-27 20 32 55 スクリーンショット 2022-02-27 20 32 49 スクリーンショット 2022-02-27 20 32 42 スクリーンショット 2022-02-27 20 44 43 スクリーンショット 2022-02-27 20 45 01 スクリーンショット 2022-02-27 20 45 07 スクリーンショット 2022-02-27 20 45 19 スクリーンショット 2022-02-27 20 45 24 スクリーンショット 2022-02-27 20 45 30 スクリーンショット 2022-02-27 20 45 38 スクリーンショット 2022-02-27 20 45 49 スクリーンショット 2022-02-27 20 45 57

コメント

世論の方向によっては、AIのアプリケーション先も限定されてきてしまうので注視していきたい。

出典

元記事

GENZITSU commented 2 years ago

衛星データとディープフェイク、CycleGANで生成した嘘のゴルフ場衛星画像は分類器を騙せるのか

衛星画像のdeppfakeという文脈で、CycleGANを用いてゴルフ場衛星画像 ⇆ 非ゴルフ場衛星画像の変換を行わせて、ゴルフ場分類機を騙せるかどうかを試した記事。

https://github.com/junyanz/pytorch-CycleGAN-and-pix2pixのコードを用いてgoogle colabで200epochほど学習を行い、以下のような生成画像を得ている。

ゴルフ場を消す方向

スクリーンショット 2022-02-27 21 37 14

ゴルフ場を生成する方向

スクリーンショット 2022-02-27 21 37 20

実際に、学習したGANでゴルフ場を生成/消すとゴルフ場判定機を騙せることを確認している。(すなわち衛星画像deppfakeの可能性をサポート)

スクリーンショット 2022-02-27 21 46 46 スクリーンショット 2022-02-27 21 46 41

コメント

面白い。

出典

元記事

GENZITSU commented 2 years ago

Pokémon AI: Gotta Create ’Em All!

ポケモンの画像と説明テキストのペアを用いてDALL-Eをfine-tuningを行うことで、ポケモンの画像を生成するAIを作成したという記事。

スクリーンショット 2022-02-27 23 57 46

以下の画像のようにかなりそれっぽい画像画像が生成される。

スクリーンショット 2022-02-27 23 59 41 スクリーンショット 2022-02-27 23 59 37 スクリーンショット 2022-02-27 23 59 32

こちらのサイトでためすことも試すことも可能

コメント

クオリティが高い。。

出典

元記事

GENZITSU commented 2 years ago

ngram言語モデルについてまとめる

ngram言語モデルの値の推定方法の様々なパターンが理論と実装セットでまとめられているマニアックな記事。

スクリーンショット 2022-02-28 17 07 05

2つめの記事ではholdout推定や交差検証, Good-Turing推定といった方法がまとめられていた。

コメント

今更ngramを使うことはあんまりないかもしれないが、メモ

出典

元記事①

元記事②

GENZITSU commented 2 years ago

13億パラメータ日本語GPT-2を使ってみる

表題の通り。rinna社から公開されたGPT-1bを用いて、promtベースで以下のようなタスクを解かせている記事。

スクリーンショット 2022-02-28 17 10 41

実装付きということで使うときに参考になりそう。

# from https://data-analytics.fun/2022/02/23/gpt-1b/

input_ids = tokenizer.encode(prompt, return_tensors="pt",add_special_tokens=False).to(device)
with torch.no_grad():
    output = model.generate(
        input_ids,
        max_length=100,
        min_length=100,
        do_sample=True,
        top_k=500,
        top_p=0.95,
        pad_token_id=tokenizer.pad_token_id,
        bos_token_id=tokenizer.bos_token_id,
        eos_token_id=tokenizer.eos_token_id,
        bad_word_ids=[[tokenizer.unk_token_id]],
        num_return_sequences=5
    )
decoded = tokenizer.batch_decode(output,skip_special_tokens=True)
for i in range(num_return_sequences):
  print(decoded[i])

コメント

メモ

出典

元記事

GENZITSU commented 2 years ago

【インターンレポート】有用性の高いモデルを獲得する差分プライベート学習手法

差分プライバシーに配慮した学習では、DP-SGDという方法がよく用いられるが、勾配にノイズを加えるためモデルの性能とのトレードオフが往々にして発生する。

Differentially-Private Stochastic Gradient Descent (DP-SGD) が広く知られています.SGDを拡張したもので,勾配を一定のノルムでクリッピングし,更にノイズを加算することで差分プライバシを満たした学習を実現します.差分プライバシを満たせる一方で,得られるモデルの有用性が低下するというトレードオフがあります.プライバシ保護をしても有用な出力が得られないモデルでは意味がないため,プライバシ強度は落とすことなく有用性を改善する必要があります.

これに対して、DNNのようなオーバーパラメトライズされたモデルは時に重要でないパラメータが出てくるという性質を用いることで、性能を改善することができることが知られている。

様々な先行研究により,ニューラルネットワークパラメータには出力への寄与が大きい重要なものとそうではないものが混在していることが知られています.この偏りはパラメータを行列として見たときに低ランク性やスパース性という形で現れます.この点に注目し,重要ではない重みの更新をスキップすることで,DP-SGDのクリッピングやノイズの影響を減らし,有用性を改善するという既存研究があります.

このインターンではこの重要出ないパラメータ(勾配)を特定するのに以下のような手法を提案し、先行研究よりもよりパラメータ数を減らすことを可能にし、差分プライバシーを保ちつつモデルの性能を下げないことを確認した。

これまで排他的だった低ランク性とスパース性の併用を,ユニットレベルの重要度を定義することで実現します.入力側ユニットと出力側ユニットのぞれぞれで接続されているシナプスの重要度の総和を計算し,それを各ユニットの重要度として定義します.任意の低ランク化手法で分解された勾配行列 (∂L,∂R) を取得した後,各ユニットがランク分解された行列にも対応があることを利用してスパース化を行います.具体的には,入力側ユニットが ∂L の行と,出力側ユニットが ∂R の列と対応するため,それぞれで重要度の低い p% のパラメータを更新対象から除外します

スクリーンショット 2022-03-01 0 51 40

スクリーンショット 2022-03-01 0 52 11

コメント

この分野に知見がなかったので、勉強になった。

出典

元記事

GENZITSU commented 2 years ago

TabNetのTuningの勘どころ

表題の通り。

スクリーンショット 2022-03-01 0 54 20

optunaで最適化するコードは以下

# from https://zenn.dev/nishimoto/articles/f2af21c24413d3

import torch
import pandas as pd
from pytorch_tabnet.tab_model import TabNetRegressor

def objective(trial):
    mask_type = trial.suggest_categorical("mask_type", ["entmax", "sparsemax"])
    n_da = trial.suggest_int("n_da", 8, 64, step=8)
    n_steps = trial.suggest_int("n_steps", 1, 10, step=3)
    gamma = trial.suggest_float("gamma", 1.0, 2.0, step=0.2)
    n_shared = trial.suggest_int("n_shared", 1, 3)
    lambda_sparse = trial.suggest_float("lambda_sparse", 1e-6, 1e-3, log=True)

    tabnet_params = dict(
        n_d=n_da, n_a=n_da, n_steps=n_steps, gamma=gamma,
        lambda_sparse=lambda_sparse, mask_type=mask_type, n_shared=n_shared,
        optimizer_fn=torch.optim.Adam,
        optimizer_params=dict(lr=2e-2, weight_decay=1e-5),
        scheduler_params=dict(
            mode="min", patience=10,
            scheduler_fn=torch.optim.lr_scheduler.ReduceLROnPlateau,
            verbose=0,
        )
    )

    model = TabNetRegressor(**tabnet_params)
    model.fit(
        X_train=trn_x, y_train=trn_y,
        eval_set=[(val_x, val_y)],
        patience=15,
        max_epochs=100,
        eval_metric=['rmse']
    )

コメント

メモ

出典

元記事