シグモイド(Sigmoid)関数

活性化関数のシグモイド関数をRで作成しグラフ表示すると次のようになる。

\[ \mbox{シグモイド関数}\quad f(x) := \frac{1}{1+e^{-x}} \]

sigmoid <- function(x) 1/(1 + exp(-x))
x <- seq(-5, 5, 0.1)
library(plotly)
plot_ly(type = "scatter", mode = "lines") |>
  add_trace(x = x, y = sigmoid(x), name = "Sigmoid")

【設問1】tanh関数

シグモイド関数と比べて中間層の数が多いNNで良い結果をだすtanh関数(次式)を作成しグラフに追加せよ。
(安易にインターネットに頼らず自分で少し考えてみること)

\[ \mbox{tanh関数}\quad f(x) := \frac{e^x-e^{-x}}{e^x+e^{-x}} \]

tanh <- function(x) NA # tanh(hyperbolic tangent)NAを消して数式を入力すること。
plot_ly(type = "scatter", mode = "lines") |>
  add_trace(x = x, y = sigmoid(x), name = "Sigmoid") |>
  add_trace(x = x, y = tanh(x),    name = "Tanh")

【設問2】ReLU関数

深層学習(deep learning)で最もよく使用されるReLU関数(次式)を作成しグラフに追加せよ。
(安易にインターネットに頼らず自分で少し考えてみること)
ヒント:Rのpmax関数

\[ \mbox{ReLU関数}\quad f(x) := \max\{0, x\} \]

relu <- function(x) NA # ReLU (rectified linear unit)NAを消して数式を入力すること。
plot_ly(type = "scatter", mode = "lines") |>
  add_trace(x = x, y = sigmoid(x), name = "Sigmoid") |>
  add_trace(x = x, y = tanh(x),    name = "Tanh")    |>
  add_trace(x = x, y = relu(x),    name = "ReLU")

【設問3】 Softmax関数

ベクトル\(\mathbf{y}=(y_1, y_2, y_3)\)を入力とし 確率ベクトル\(\mathbf{p}=(p_1, p_2, p_3)\)を返すSoftmax関数を作成せよ。 また,\(y_i\)をSoftmax関数で変換した後の確率\(p_i\)について, すべての\(i\)についての合計を求めると値はいくつになるか答えよ。

\[ \mbox{Softmax関数}\quad p_i = f(y_i) := \frac{e^{y_i}}{\sum_j e^{y_j}} \]

softmax <- function(y) NA # Softmax NAを消して数式を入力すること。
y <- c(-1.0, 0.2, -1.5, 2.0)
xnames <- paste0('y', seq_along(y))

p <- softmax(y)

plot_ly(type = "bar", x = xnames, y = y, name = "入力値 y") |>
  add_trace(y = p, name = "Softmax 変換後")

【設問4】 活性化

次の状況下でニューロンは活性化するか否か?\(y\)の閾値を0.5とせよ。

\[ t = w\cdot x + b \] \[ y = \sigma(t) \] ここで,「\(\cdot\)」は内積を表す