オムライスの備忘録

数学・統計学・機械学習・プログラミングに関することを記す

【ライフハック】はてなブログの記事一覧をGoogle Sheets へ自動で書き出したい (GAS)

モチベーション

はてなブログの一覧を Google Sheets で管理したいと欲求が込み上げてきました. 手動で現在投稿した記事を Sheets にコピペして、新しい記事を書くたびに追加する運用も考えましたが、少し面倒そうです. そこで GAS で簡単にできたらいいなと思い作ってみました.

処理の流れ

  1. スプレッドシート の更新をトリガーにGAS を起動
  2. GAS がはてなブログ記事一覧を取得(AtomPub を使って、XML形式でデータを取得します)
  3. GAS でXMLからブログタイトル一覧を取得
  4. GAS で Sheets 書き込み

作業内容

  1. はてなブログから API key を取得
  2. Google Sheets を作成
  3. Sheets に紐付いた GAS を作成
  4. GAS でコーディング (API key を使用)
  5. GAS のトリガーを設定

はてなブログから API key を取得

はてなブログが提供している API を利用するために、はてなブログの設定から API key を取得します. [設定] → [詳細設定] → [AtomPub] から取得できました.

www.kotanin0.work (ほとんどこのサイトを参考にさせていただきました)

Google Sheets を作成

サイト一覧の情報を書き出す Sheets を作成します.

このとき、書き出す先のシートの idシート名をメモしてください. GAS のコーティングのときに使用します.
シートのid を Sheets の URL の以下の部分です.

https://docs.google.com/spreadsheets/d/sheet_id


シート名はシートを作成すると下にあるタブの名前です.

Sheets に紐付いた GAS を作成

「ツール」 -> 「スクリプト エディタ」を選択し、GAS を作成します.

GAS でコーディング

メインの関数 1 つ(HatenaListGet)と、部分的な関数 4 で構成してみました.

  • XML からブログタイトルを取得する関数 : getTitles
  • XML から次の URL を取得する関数 : getNextURL
  • API を使って、XML を取得する関数 : getXML
  • 取得したブログ一覧を Sheets へ書き込む関数 : setContents


(基本コードをベタばりで動くと思います. 記入箇所を埋めていれば)


function getTitles(xml) {
  var entries = Parser.data(xml).from('<title>').to('</title>').iterate();

  // ブログタイトルを除く
  var blog_title = entries.shift();

  return entries
}
function getNextURL(xml) {
  var url = Parser.data(xml).from('<link rel="next" href="').to('" />').build();

  if (url.slice(0,4) != "http"){
    var url = "Nothing"
  }
  return url
}

ここで、はてなのユーザID と API Key を使います.

function getXML(url) {
  // はてなのユーザID、APIキー
  const user = 'xxx';
  const apiKey = 'xxx';
  // リクエストヘッダの準備
  const options = {
    'method' : 'GET',
    'headers' : {'Authorization' : 'Basic ' + Utilities.base64Encode(user + ':' + apiKey)}
  }  
  // xml形式で返却される
  var xml = UrlFetchApp.fetch(url, options).getContentText();

  return xml
}

ここで、sheets id とシート名を使います. sheet の中のどこの部分に書き出すかを変更する場合は、この関数をいじれば変えれます.

function setContents(contentList){
  var contentLength = contentList.length;

  var spreadsheet_id = 'xxx';
  var sheet_name = 'xxx';

  var spreadsheet = SpreadsheetApp.openById(spreadsheet_id);
  var sheet = spreadsheet.getSheetByName(sheet_name);

  var count = 2;
  contentList.forEach(function(content){
    sheet.getRange("A"+String(count)).setValue(content);
    count += 1;
  });
}

AtomPub へアクセスするためのURL は以下を参考に作ってください.

https://blog.hatena.ne.jp/{はてなID}/{ブログID}/atom/entry
function HatenaListGet() {
  // ルートエンドポイント
  var url = 'xxx';

  var ended = false;
  var contentList = [];
  while (!ended) {
    var xml = getXML(url)

    var entries = getTitles(xml);
    contentList = contentList.concat(entries);

    url = getNextURL(xml);
    console.info(url)

    if (url == "Nothing") {
      break
    }
  }
  contentList = contentList.reverse();
  console.info(contentList)
  setContents(contentList);
}

GAS のトリガーを設定

GAS のトリガーを設定します.

「トリガー」-> 「トリガーを追加」を選択し、関数やソース、イベントの種類を選択します.(ほとんど、デフォルトでいけそうです)

まとめ

  • 今回は、GAS を使ってはてなブログ一覧を取得し、Sheets に書き出しました.
  • XML からの情報抽出を調整すれば、ブログ URL (タイトルではなく)を取得できそうでした.

【統計学】回帰分析 #アルゴリズム編 #01

この記事の読者

統計学の基礎となる「回帰分析」について知りたい.

Index

回帰分析とは

回帰分析 / Regression Analysis は、
2 変数  X, Y のデータがあるとき回帰方程式と呼ばれる「説明の関係を定量的に表す式
を求めることを目的とする分析手法.

説明変数と目的変数

説明される変数を  Y で表し、これを 目的変数 (被説明変数 / 従属変数 / 内生変数)と呼ぶ.

また、説明する変数を  X で表し、これを 説明変数 (独立変数 / 外生変数) と呼ぶ.

目的

回帰分析の目的は、
 X Y との定量的な関係の構造 (モデル : Model) を求めること(=モデリング)である.

しかし、注意するべき点は、
 Y X で説明しようとすること」であり、
 X Y との間に関係があるかどうか」を調べる相関分析とは、この点において本質的に異なる.

例1

いきなりだが、理解を円滑に進めるために、例を考える.

以下のデータは、1979年 5月 7日から 26日までの 「東京の気圧」と「前日の福岡における日平均海面気圧」のデータである.



天候は西から東へ変化するから、東京の気圧を予測する上で
前日の福岡の気圧は重要なデータであると考えられる.

つまり、この間の関係を分析することは東京の天気予報を行う上で役に立つと考えられる.

以下は表のデータをグラフ化したものである.



ここでは、「前日の福岡における日平均海面気圧」を 説明変数  X
「東京の気圧」を目的変数  Y とする.

この図から、「東京の気圧」について以下のようなことがわかる.

【 1 】. 福岡の前日の気圧が増加するに従って増加する傾向がある.
【 2 】. 福岡の前日の気圧が同一であってもばらつきがある.

変数定義

  • 説明変数:  x
    •  D 個 / 次元 の説明変数を持つ観測
    •  n 番目の観測:  x_{n}\ =\ (x_{n}^{1},\ \cdots,\ x_{n}^{D})

  • 目的変数:  y

  • データセット:  D\ =\ \{\ (x_1,\ y_1),\ \cdots,\ (x_N,\ y_N)\ \}
    •  N 個の観測

回帰方程式

例1 から Y を X で表現する (モデル化する / 説明する) には、
以下の 2 つの要素が含まれていることがわかる.

【 1 】. 「東京の気圧」が「福岡の気圧」によって変化する部分
【 2 】. それ以外のばらつきの部分



【 1 】 の変化の部分のみを数式で表すと以下のようになる.

 y\ =\ f(x)\ =\ \beta_{0}\ +\ \beta_{1}\ x \tag{1}



これを回帰方程式 / 回帰関数と呼ぶ. (  \beta_0, \beta_1回帰係数という.)

そして、この関数が線形関数である場合は線形回帰モデル / Linear Regression
それ以外のものを 非線形回帰モデル / Non Linear Regressionと呼ぶ.

単回帰と重回帰

例1 の場合、説明変数は 1 種類のみだが、 データ分析を行う上で説明変数が複数ある場合もある.

複数の説明変数で回帰方程式を表した場合、重回帰 という.

それに対して、説明変数は 1 種類のみの場合は単回帰という.



 D 個 (次元) の説明変数を観測があるとすると、

y\ =\ f(x)\ =\ \beta_0\ +\ \beta_1 x^{1}\ +\ \cdots\ +\ \beta_D x^{D} \tag{1.1}



機械学習の分野では、「回帰モデル」といった場合、
一般化して「説明変数  D 個の重回帰」を指すことが多い.

 D=1 とすれば単回帰になるので、わざわざ分ける必要もないだろうということなのかも.

線形基底関数モデル

また、回帰方程式のモデル化・数式化において、式 (1.1) のように
説明変数 (入力変数)  x_i に関する線形関数になってる場合、
目的変数への表現が制限されている (表現が乏しい) ということになる.

そこで、非線形な関数を導入して、
非線形な関数の線形結合で回帰方程式を表現することで、
モデルを拡張・一般化することができる.

母回帰係数 / Parameter

では、【 2 】 のばらつきの部分について、考えることに戻ろう.

例1 の観測されたデータについて、  i 番目の「東京の気圧」を  y_i、「前日の福岡の気圧」を  x_i とする.

ばらつきの部分を  \epsilon_i とおくと、母集団において、以下のように表現できる.

 y_i\ =\ \beta_0\ +\ \beta_1 x_i\ +\ \epsilon_i \tag{2}



このモデルを母回帰方程式 / Population Regression Equation と呼び、
 \beta_0, \beta_1母回帰係数 / Population Regression Conefficient と呼ぶ.

母回帰係数 は、母集団の値であるから一般にはわからない.



これについて推定、検定するのが回帰分析である.

ただし、 x_{i} は確率変数ではなく、すでに確定した値があることに注意.

誤差項 / Error

また、 \epsilon_i誤差 (項) / Error Term と呼ばれている.

ノイズと表現することもある.



この回帰方程式と観測データとの誤差を最小にするパラメータを 計算・推定する手法の一つとして、最小二乗法がある.

確率モデル

この誤差を確率変数と考えることもできる.

そのとき、次の 3 つの条件を満たす確率変数であると考える.

( a ). 期待値は  0 になる.
 E[ \epsilon_i ]\ =\ 0,\ \ \ i\ =\ 1, 2, \cdots, n

( b ). 分散は一定で  \sigma^{2}
 V ( \epsilon_i )\ =\ \sigma^{2},\ \ \ i\ =\ 1, 2, \cdots, n

( c ). 異なった誤差項は無相関 (互いに関与しない)
 i\ \neq\ j\ \Rightarrow\ Cov(\epsilon_i, \epsilon_j)\ =\ E[\epsilon_i\ \epsilon_j]\ =\ 0



このことは、式 (2) のモデルの期待値が、

 E[y_i]\ =\ \beta_0\ +\ \beta_1 x_i,\ \ \ i\ =\ 1, 2, \cdots, n



となることを意味している.

誤差の確率分布

上のように、ある特定の確率分布の確率変数であると考えている.

 \epsilon\ \sim\ p(\epsilon)



上の誤差項の条件では、平均  0 、分散  \sigma^{2}正規分布 (ガウス分布)ということになる.

ガウス分布のノイズの場合は、ガウスノイズのように呼ぶ.



 \epsilon\ \sim\ p(\epsilon)\ =\ N(0,\ \sigma^{2})



誤差の分布の形が不明である場合は、誤差分布のモデルとしてガウス分布が利用されることが多い.

これは、必ずしもガウス分布に従わない互いに独立な誤差でも、その総和は中心極限定理によって、 ガウス分布に近づくからである.

目的変数の確率分布

誤差に確率分布を仮定したので、目的変数の確率分布も考えられる.

上の関係式と仮定した分布をまとめると以下のようになる.


\left\{
\begin{array}{ll}
y\ =\ f(x)\ +\ \epsilon & \\
\epsilon\ \sim\ p(\epsilon)\ =\ N(0,\ \sigma^{2})&
\end{array}
\right.


これから、目的変数  y の確率分布を考える.

 y\ \sim\ p(y)\ =\ N(f(x),\ \sigma^{2})



 y の確率分布は、 x の入力が必要になるので、条件付き確率分布と考えることができる.

 p(y\ |\ x)\ =\ p(y)

パラメータ空間

ではでは、パラメータを確率変数として扱う、ベイズ統計を考えてみる.



まとめ

  • 目的変数説明変数で表現する回帰方程式を使って、関係性をモデル化する
  • 係数を推定することで、未知の目的変数を推定することができる

参考

【深層学習】Transformer #アルゴリズム編

この記事の読者

深層学習・ディープラーニングの手法の1つである「Transformer」について知りたい.


キーワード・知ってると理解がしやすい

  • Attention
  • Memory Network

Attention まとめ yhayato1320.hatenablog.com

yhayato1320.hatenablog.com

Index

Transformer とは

Seq2Seq (Encoder - Decoder Model) をベースに 再帰的なニューラルネットワーク(RNN etc)を廃止し、
代わりに、Feed Forward Network (FFN)Multi Head Self Attention の 2 つレイヤで構成されたモデル.

メリット

RNN のような再帰的な計算をなくすことで、計算コストを低下させる.
つまり、再帰的な計算だと、前の計算が終わらないと次の計算ができないが、 時系列の情報を行列で扱うので、行列演算でえいやできる.

yhayato1320.hatenablog.com

Architecture

Encoder と Decoder の2つから構成されている. (Encoder-Decoder Model)


  • Encoder 入力系列 :  \\{ x_1,\ \cdots,\ x_n \\}
    • 入力系列の長さ :  n
  • Encoder 出力 (Decoder 入力) :  \\{ z_1,\ \cdots,\ z_n \\}
    • 出力(入力)系列の長さ :  n
  • Decoder 入力系列 :  \\{ y_1,\ \cdots,\ y_m \\}
    • 入力系列の長さ :  m


Encoder

いくかの (発表論文では6) のLayer(= Encoder Layer)で、構成されている.


その Encoder Layer は 2 つの Layer で構成されている.

  • Multi-Head Self-Attention Layer (Attention)
  • Position-Wise Fully Connected Feed-Forward Network (FFN)



また、Residual Connections を導入して、以前の情報を生かす.

yhayato1320.hatenablog.com

その後、Layer Normalization を行う.

yhayato1320.hatenablog.com

Decoder

いくかの (発表論文では6) のLayer(= Decoder Layer)で、構成されている.


その Decoder Layer は 3 つの Layer で構成されている.

  • Position-Wise Fully Connected Feed-Forward Network (FFN)
  • Multi-Head Self-Attention Layer (Attention)
  • Masked Multi-Head Self-Attention Layer (Attention)



Encoder と異なるのは、「Masked Multi-Head Self-Attention Layer」の部分.(あと 2 つは同様)

Attention Layer

Attention Layer は、Encoder / Decoder のどちらにも組み込まれている.

  • Encoder : Multi-Head Self-Attention Layer
  • Decoder : Multi-Head Self-Attention Layer + Masked Multi-Head Self-Attention Layer

yhayato1320.hatenablog.com

Multi-Head Self-Attention Layer の性質・工夫・構成要素は以下.

  • Self Attention
  • Scaled Dot Product Attention
  • Multi Head Attention


Masked Multi-Head Self-Attention Layer は、Multi-Head Self-Attentionを
NLP のタスクとして穴埋めを行うため、マスクを施した入力に対応した形式にしたもの.
(Masked Self Attention?)

Self Attention

入力に対し、入力自身のどの部分に注目するかを重み付けする仕組み.

yhayato1320.hatenablog.com

正確には、Decoder の2つ目の Attention は、入力に対し、Self (入力自身) だけの情報だけでなく、
Encoder の情報も重要視するかどうかも、重み付けするので、Self Attention というよりは、Source Target Attention に近いイメージか?

Scaled Dot Product Attention

Query と Key の類似度を計算する手段である スコア関数に、行列の内積(Dot Product) を採用している Attention.

yhayato1320.hatenablog.com

Multi Head Attention

表現力を増やすために、複数のAttention のための重みを利用する仕組み.
(層を増やす訳ではないので、逐次的な計算が増える訳ではなく、 並列的な計算を行列計算で行える.)

yhayato1320.hatenablog.com

Position-Wise Fully Connected Feed Forward Network

Encoder / Decoder にある、Attention の後にある処理.

全結合 + ReLU + 全結合の処理.


 FFN(x)\ =\ \max(0, xW_{1}\ +\ b_{1})W_{2}\ +\ b_{2}


位置単位(単語単位)に、共通のFeed Forward Network を適用する.
Layer ごとには、異なる重みを利用する.


Dropout Layer 入れる?

ネットワークの入力

Encoder / Decoder 以外の部分の Architecture にも着目してみる. (主に入力部分)
2つの処理が、行われている.

  • Embedding
  • Encoding


Embedding

事前学習モデル(分散表現)を利用して、(Encoder / Decoder への)
入力情報(入力トークンと出力トークン)をベクトルに変換する.

yhayato1320.hatenablog.com

Encoder の Embedding Layer (分散表現)と、Decoder の Embedding Layer (分散表現)と、 Decoder の出力部分の線形変換の重みを共通のものを利用する.
参考 : Using the output embedding to improve language models.

Positional Encoding

Encoder と Decoder への入力前(Embedding の後)に行う処理.

目的は、入力の位置関係(時系列関係)を表現すること.

Transformer は、再帰的なシステム(ネットワーク)をなくしたため、(単語の)時系列的ま情報が表現されていない. そのため、時系列関係の情報を加えることで、時系列情報を所持する.


ネットワークが単語の位置関係を認知できるように、 各(単語)時系列に追加される定数行列にすぎない.


使用される関数は、sin / cos を利用する. この関数の決定には、様々な選択肢があり、検討の余地がある.

学習 / Training

データセット

  • 英語 <-> ドイツ語 翻訳データセット

    • WMT2014
    • 約450万の文の英語とドイツ語ペアのデータセット.
    • 約37000 単語の語彙で Embedding / トークン化された.
  • 英語 <-> フランス語 翻訳データセット

    • 約3600万の文の英語とドイツ語ペアのデータセット.
    • 約32000 単語の語彙で Embedding / トークン化された.
  • バッチサイズは、約25000 のペア

ハードウェアと訓練時間

  • NVIDIA P100 GPU x8

  • Base Model

    • 0.4 s / step
    • 10万 step
    • 12 h
  • Big Model

    • 1.0 s / step
    • 30万 step
    • 3.5 day

Optimizer

Adam を利用.

yhayato1320.hatenablog.com

 \beta_{1}\ =\ 0.9,\ \beta_{2}\ =\ 0.98,\ \epsilon\ =\ 10^{-9}

正則化 / Regularization

3 つの正則化を実施.

  1. Encoder / Decoder
    • 各サブレイヤーの正規化 (Layer Normalization) の前に Dropout を適用
  2. Word Embedding / Positional Encoding の後に Dropout を適用
  3. ラベルスムージング / Label Smoothing

yhayato1320.hatenablog.com

参考

  • Attention Is All You Need
    • [2017 Google]
    • 1 Introduction
    • 3 Model Architecture
      • 3.1 Encoder and Decoder Stacks
      • 3.2 Attention
        • 3.2.1 Scaled Dot-Product Attention
        • 3.2.2 Multi-Head Attention
      • 3.3 Position-wise Feed-Forward Networks
      • 3.4 Embeddings and Softmax
      • 3.5 Positional Encoding
    • 5 Training
      • 5.1 Training Data and Batching
      • 5.2 Hardware and Schedule
      • 5.3 Optimizer
      • 5.4 Regularization
    • arxiv.org

Web サイト

  • 深層学習界の大前提Transformerの論文解説!

【深層学習】Self Attention

この記事の読者


深層学習・ディープラーニングの改善手法の1つである「Self Attention」について知りたい.



キーワード・知ってると理解がしやすい

  • ざっくり Attention


Attention #まとめ編 yhayato1320.hatenablog.com

Index

用語定義

使用する変数や用語を以下ページで定義しております. 【深層学習】Attention #まとめ編 - オムライスの備忘録

Self Attentionとは

ざっくりと

自分自身に対してAttention を行って、その結果を自分自身に反映する仕組み 自分自身の他の場所の特徴に着目して、自分自身を特徴付ける仕組み



Query, Memory の関係性でいうと

深層学習における改善手法「Attention」のひとつ. 入力Queryと索引Memoryが同じAttention.

メリット

Self Attention を導入することで、疎結合にするという制約が加わることで、過学習を抑制できる.

参考

動画

www.youtube.com

【深層学習】Attention #概念編

用語定義

使用する変数や用語を以下ページで定義しております.
【深層学習】Attention #まとめ編 - オムライスの備忘録

Attention とは

ざっくりと

入力側のどこに注目するかを表現する仕組み、あるいは注目した入力データに従って出力を行う仕組み

やっていることは、

複数のベクトル (行列) があったとき、どのベクトルを重要視するかも含めて学習させる仕組み.
(「深層学習による自然言語処理」より)

基本的な処理

  1. Query と Key をスコア関数に入力して重要度スコアを計算
  2. Softmax 関数で割合化・確率化し重要度確率を計算
  3. Value重要度確率で、重み付き平均の計算を実施し、Value から有益な情報(コンテキストベクトル)を取得

Attention の目的

Attentionは、QueryKey が似ているかどうかで、行列のどの要素(ベクトル)を読み込むかどうかを制御している. 画像データの位置関係 (空間的に近いデータ点同士の方が強い関係性を持つ)や、時系列データの系列関係 (時系列的に近いデータ同士の方が強い関連性を持つ)を 度外視して(空間的、時系列的に遠い情報でも重要かどうかを見ているため)、重要な情報同士をまとめることができる.
xtech.nikkei.com

参考

動画

  • Deep Learning入門:Attention(注意)
    • Self Attention
    • 画像データへの Attention
    • 言語(系列)データへの Attention

www.youtube.com

【深層学習】Gated Recurrent Unit / GRU

こんな方におすすめ

深層学習・ディープラーニングでも必要な「Gated Recurrent Unit : GRU」の基本的な内容について知りたい.



この記事では、Gated Recurrent Unit : GRUの基礎概念のまとめを行う.

Index

Gated Recurrent Unit : GRUとは

RNN のネットワークアーキテクチャを基本とした、拡張したモデル.

GRUは、LSTM の改善手法として提案された.

LSTM との違い

LSTMは、RNN の改善手法で「ゲート」という機構を搭載していた.

しかし、そのためにパラメータ数が多くなるという問題点もある.

そこで、「ゲート」を有効活用しつつ、パラメータ数 (ゲートの数) を減らした構造になっている.

インターフェース

LSTM は 隠れ状態記憶セル の 2 角ラインを使用する.

対して、GRU は隠れ状態だけを使用する.

計算グラフ

RNN の計算グラフ.



LSTM の計算グラフ.



このグラフから「記憶セル」なくし、複数の異なる「ゲート」を搭載することでGRUの計算グラフが出来上がる.

搭載されているゲートは 2 つ.

  • Reset ゲート (r)
  • Update ゲート (z)

Reset ゲート

Reset ゲートは、過去の隠れ状態をどれだけ 無視・リセットするのかを決定している.

 r = \sigma\ (\ x_t w_x^{(r)}\ +\ h_{t-1} w_h^{(r)}\ +\ b^{(r)}\ )

Update ゲート

Update ゲートは、隠れ状態を更新する.

 z = \sigma\ (\ x_t w_x^{(z)}\ +\ h_{t-1} w_h^{(z)}\ +\ b^{(z)}\ )



Update ゲートは、LSTM の Forget ゲート / Input ゲートの 2 つの役割を担っている.

Forget ゲートとして機能しているのは、 以下の計算箇所.

 (1 - z)\ \odot\ h_{t-1}



Input ゲートとして機能しているのは、以下の計算箇所.

 z\ \odot\ \tilde{h}

まとめ

  • GRU は、LSTMをよりシンプルにしたネットワークアーキテクチャ.
  • タスクやハイパーパラメータによっては、精度の優劣は変わる.

参考

  • Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation

書籍

【深層学習】畳み込みニューラルネットワーク #まとめ編

深層学習の「畳み込みニューラルネットワーク」について、書いた記事をまとめた.

Index

基本理論

深層学習のテクニックの中に、画像処理の仕組みを応用した特徴量の抽出手法として 畳み込みニューラルネットワーク / CNN がある.

CNN では、画像処理でも利用されるフィルタリング処理やプーリング処理などを加えており、 その際利用される重みに対して、深層学習の枠組みで最適化を行う.

アルゴリズム

概念編

ネットワークアーキテクチャの改善

LeNet / 1998

CNN の基本的なアイディア.

AlexNet / 2012



ZFNet / 2013

  • Visualizing and Understanding Convolutional Networks

Fourier Convolutional Neural Network / FCNN / 2013 -

3D CNN / 2013

VGG / 2014

GoogleNet / InceptionNet / 2014 -

Inception Module.

  • Going Deeper with Convolutions

InceptionNet v2 / 2015

  • Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

InceptionNet v3 / 2015

InceptionNet v4 / Inception-ResNet / 2016

  • Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

InceptionNeXt / 2023

Fully Convolutional Network / FCN / 2014

Skip Layer Connection / 2015

U-Net / 2015

Feature Pyramid Network / FPN / 2016

Path Aggregation Network / PAN / PANet / 2018

Dilated Convolution / 2015

D3Net / 2020

Dilated Convolution + Dense Net

  • Densely connected multidilated convolutional networks for dense prediction tasks

  • 異なる解像度の特徴をどう結びつけるべきか?:Sonyが提案したD3Net

1D CNN / 2015 -

Darknet / 2016 -

Xception / 2016

MobileNet / 2017

Deformable Convolutional Networks / DCN / 2017 -

OSNet / 2019

ConvNeXt / 2022

ConvNeXt V2 / 2023

  • ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
ConvNeXt に自己教師あり学習の MAE を統合した FCMAE を持つ改良モデル ConvNeXt V2を紹介.

GRNという新しい層により、チャネル間の競合関係を強調する改善を施す.

一定のスケール性を持つ.



RepLKNet / 2022

FlashButterfly / 2023

  • Simple Hardware-Efficient Long Convolutions for Sequence Modeling

Pooling

画像処理タスク

物体認識 / Object Recognition

物体検出 / Object Detection

セグメンテーション / Segmentation

画像生成

他データ分野への応用

動画像処理

参考

  • Papers Explained Review 01: Convolutional Neural Networks

  • ML Papers Explained

  • CS class CS231n: Convolutional Neural Networks for Visual Recognition