{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "sb_auto_header", "tags": [ "sb_auto_header" ] }, "source": [ "\n", "\n", "\n", "[\"Open](https://colab.research.google.com/github/speechbrain/speechbrain/blob/develop/docs/tutorials/nn/recurrent-neural-networks-and-speechbrain.ipynb)\n", "to execute or view/download this notebook on\n", "[GitHub](https://github.com/speechbrain/speechbrain/tree/develop/docs/tutorials/nn/recurrent-neural-networks-and-speechbrain.ipynb)" ] }, { "cell_type": "markdown", "metadata": { "id": "N20rXBhI1dx1" }, "source": [ "# Recurrent Neural Networks\n", "\n", "Recurrent Neural Networks (RNNs) provide a natural approach for processing sequences.\n", "\n", "In most cases, the elements of a sequence are not independent. The emission of a particular output often depends on the surrounding elements or even the entire history.\n", "\n", "To adequately model the sequence evolution, the presence of **memory** is crucial to keep track of past or future elements. Memory is implemented using **feedback connections**, introducing the concept of \"state.\" RNNs rely on the following equation:\n", "\n", "$ h_t = f(x_t, h_{t−1}, θ)$\n", "\n", "where \\(h_t\\) and \\(h_{t−1}\\) are the current and previous states, and \\(θ\\) represents the trainable parameters.\n", "\n", "Due to this recurrence, the current state depends on the previous one, and the previous one depends on the element before, creating a dependency on all previous elements.\n", "\n", "## 1. Vanilla RNN\n", "\n", "The simplest form of RNN is the vanilla RNN, described by the following equation:\n", "\n", "$ h_t = \\tanh(W x_t + Uh_{t−1} + b) $\n", "\n", "Here, the parameters \\(θ\\) include the weight matrix \\(W\\) (feed-forward connections), the matrix \\(U\\) (recurrent weights), and the vector \\(b\\) (bias).\n", "\n", "To train an RNN, a network **unfolding over the time** axis is necessary, as illustrated in the following figure:" ] }, { "cell_type": "markdown", "metadata": { "id": "v22oq1OpvZaW" }, "source": [ "![image.png](data:image/png;base64,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)" ] }, { "cell_type": "markdown", "metadata": { "id": "s6J4qdfHw_5e" }, "source": [ "After unfolding, the RNN can be treated as a feed-forward neural network, that is very **deep along the time axes**.\n", "Therefore, the same algorithms adopted for training feed-forward neural networks can be used. Sometimes, the back-propagation algorithm in the context of recurrent neural networks is called **back-propagation through time**, to emphasize that the gradient is propagated through the time axes.\n", "\n", "An important aspect of RNNs is that the **parameters are shared across the time steps**, making model generalization easier.\n", "Let's now take a look into a Vanilla RNN using SpeechBrain. First of all, let's install it and download some test data." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "executionInfo": { "elapsed": 24341, "status": "ok", "timestamp": 1708524174929, "user": { "displayName": "adel moumen", "userId": "01620107593621714109" }, "user_tz": -60 }, "id": "JwI8QTTCx5BT" }, "outputs": [], "source": [ "%%capture\n", "# Installing SpeechBrain via pip\n", "BRANCH = 'develop'\n", "!python -m pip install git+https://github.com/speechbrain/speechbrain.git@$BRANCH" ] }, { "cell_type": "markdown", "metadata": { "id": "R3M-dxFWy2RE" }, "source": [ "SpeechBrain has a bunch of RNNs implemented in `speechbrain.nnet.RNN`. Let's see an example with a vanilla RNN:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 11814, "status": "ok", "timestamp": 1708524186736, "user": { "displayName": "adel moumen", "userId": "01620107593621714109" }, "user_tz": -60 }, "id": "BzM1wQtJzhnh", "outputId": "009aa35a-2ef3-41ef-973a-0f1843f4baef" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([4, 10, 5])\n" ] } ], "source": [ "import torch\n", "from speechbrain.nnet.RNN import RNN\n", "\n", "inp_tensor = torch.rand([4, 10, 20]) # [batch, time, features]\n", "net = RNN(hidden_size=5, input_shape=inp_tensor.shape)\n", "out_tensor, _ = net(inp_tensor)\n", "\n", "print(out_tensor.shape)" ] }, { "cell_type": "markdown", "metadata": { "id": "nn1ewbdF0aT2" }, "source": [ "As you can see, the expected input must be formatted as $[batch, time, features]$. This is a standard followed by all the neural networks implemented in SpeechBrain.\n", "\n", "The output has the same number of batch (i.e., four), the same number of time-steps (i.e., 10), and the transform feature dimension (which in this case is five like the selected hidden_size).\n", "\n", "Let's now take a look into the parameters:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 16, "status": "ok", "timestamp": 1708524186737, "user": { "displayName": "adel moumen", "userId": "01620107593621714109" }, "user_tz": -60 }, "id": "xqWA0OmT2qNp", "outputId": "2da1677d-0895-41e2-e03b-8a704d4371af" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "rnn.weight_ih_l0 torch.Size([5, 20])\n", "rnn.weight_hh_l0 torch.Size([5, 5])\n", "rnn.bias_ih_l0 torch.Size([5])\n", "rnn.bias_hh_l0 torch.Size([5])\n" ] } ], "source": [ "for name, param in net.named_parameters():\n", " if param.requires_grad:\n", " print(name, param.shape)" ] }, { "cell_type": "markdown", "metadata": { "id": "mGUI5PBn3Oe4" }, "source": [ "\n", "* The first parameter is the matrix $W$ (input-to-hidden) with dimension $[5, 20]$, where five is the hidden size, and 20 is the input dimension.\n", "* The second parameter is $U$ (hidden-to-hidden) that corresponds to the recurrent weights. It is always a square matrix. In this case, the dimensionality is $[5,5]$ because of the selected hidden dimension.\n", "* Finally, we have a couple of vectors composed of hidden_dim elements. These two tensors represent the bias term $b$. In this case, the term is split into two biases (one for the input and one for the recurrent connections). In other cases, a single bias (that embeds both) is used.\n" ] }, { "cell_type": "markdown", "metadata": { "id": "FFkGlSlNEO8g" }, "source": [ "When setting **bidirectional=True**, a bidirectional RNN is used:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 14, "status": "ok", "timestamp": 1708524186737, "user": { "displayName": "adel moumen", "userId": "01620107593621714109" }, "user_tz": -60 }, "id": "0JoxqiDSEc_G", "outputId": "d0ecba13-1da2-49fb-b603-a3ce635a66de" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([4, 10, 10])\n" ] } ], "source": [ "inp_tensor = torch.rand([4, 10, 20]) # [batch, time, features]\n", "net = RNN(hidden_size=5,\n", " input_shape=inp_tensor.shape,\n", " bidirectional=True\n", " )\n", "out_tensor, _ = net(inp_tensor)\n", "\n", "print(out_tensor.shape)" ] }, { "cell_type": "markdown", "metadata": { "id": "uVUSxwgPEnJn" }, "source": [ "In this case, we have two independent neural networks that scans the input sequence left-to-right and right-to-left. The resulting hidden states are then concatenated in a single \"**bidirectional**\" tensor. In the example, the feature dimension is now 10, which corresponds to two times the original hidden dimension." ] }, { "cell_type": "markdown", "metadata": { "id": "d9C8r9JzFUVn" }, "source": [ "In the previous examples, we use a single layer RNN. We can make the model deeper in the feature dimension just by stacking more layers:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 11, "status": "ok", "timestamp": 1708524186737, "user": { "displayName": "adel moumen", "userId": "01620107593621714109" }, "user_tz": -60 }, "id": "KozFLrBfFkFe", "outputId": "8e2c8709-5e9b-4964-8c73-b17792e40e8a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([4, 10, 10])\n" ] } ], "source": [ "inp_tensor = torch.rand([4, 10, 20]) # [batch, time, features]\n", "net = RNN(hidden_size=5,\n", " input_shape=inp_tensor.shape,\n", " bidirectional=True,\n", " num_layers=3,\n", " )\n", "out_tensor, _ = net(inp_tensor)\n", "\n", "print(out_tensor.shape)" ] }, { "cell_type": "markdown", "metadata": { "id": "z3hVBHUg5dbH" }, "source": [ "RNNs requires back-propagating the gradient through many time steps. This operation, however, can be complicated by vanishing and exploding gradients. These issues impair learning long-term dependencies.\n", "\n", "* **Exploding gradient** can be tackled with simple clipping strategies.\n", "\n", "* **Vanishing gradient**, instead, is more critical. It could be attenuated by adding \"gradient shortcuts\" in the network design (think about residual networks, skip connections, or even attention mechanisms).\n", "\n", "A common approach for RNNs relies on **multiplicative gates**, whose core idea is to introduce a mechanism for better controlling the flow of information through the various time-steps.\n", "\n", "The most popular network relying on gating mechanism is the Long-Short Term Memory (LSTM) that will be described in the following." ] }, { "cell_type": "markdown", "metadata": { "id": "3P8ah1dSDoXw" }, "source": [ "## 2. Long-Short Term Memory (LSTM)\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "id": "6aUX8Ua4Gy64" }, "source": [ "LSTMs rely on a network design consisting of memory cells that are controlled by forget, input, and output gates:\n", "\n", "$f_t = \\sigma(W_f x_t + U_f h_{t-1} + b_f)$\n", "\n", "$i_t = \\sigma(W_i x_t + U_i h_{t-1} + b_i)$\n", "\n", "$o_t = \\sigma(W_o x_t + U_o h_{t-1} + b_o)$\n", "\n", "$\\widetilde{c}_t = \\sigma(W_c x_t + U_c h_{t-1} + b_c)$\n", "\n", "$c_t = f_t \\cdot c_{t-1} + i_t \\cdot \\widetilde{c}_t $\n", "\n", "$h_t = o_t \\cdot \\sigma(c_t)$,\n", "\n", "where $\\sigma$ is the sigmoid function.\n", "\n", "As you can see, the network design is quite complex, but this model turned out to be very general-purpose.\n", "\n", "The easiest way to see why this model can learn** long-term dependencies** is the following: with proper values of the f_t, i_t, and o_t, we can store the internal cell state $c_t$ for an arbitrary number of time steps (if $f_t = 1$ and $i_t=0$).\n", "\n", "Let's see how to use an LSTM within SpeechBrain:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 8, "status": "ok", "timestamp": 1708524186737, "user": { "displayName": "adel moumen", "userId": "01620107593621714109" }, "user_tz": -60 }, "id": "YORiCIM1LY4G", "outputId": "cd2d9e00-db77-4bbc-dfb4-5252c21056ce" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([4, 10, 5])\n" ] } ], "source": [ "import torch\n", "from speechbrain.nnet.RNN import LSTM\n", "\n", "inp_tensor = torch.rand([4, 10, 20]) # [batch, time, features]\n", "net = LSTM(hidden_size=5, input_shape=inp_tensor.shape)\n", "out_tensor, _ = net(inp_tensor)\n", "\n", "print(out_tensor.shape)" ] }, { "cell_type": "markdown", "metadata": { "id": "70jAh8sILomt" }, "source": [ "As you can see, the dimension in input and output are the same as the vanilla RNN (when using the same hidden_size). The number of parameters, however, is very different:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 6, "status": "ok", "timestamp": 1708524186737, "user": { "displayName": "adel moumen", "userId": "01620107593621714109" }, "user_tz": -60 }, "id": "sk4R1BSgMAi_", "outputId": "9fbb6dfb-a608-443f-9886-42b49cc43b9f" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "rnn.weight_ih_l0 torch.Size([20, 20])\n", "rnn.weight_hh_l0 torch.Size([20, 5])\n", "rnn.bias_ih_l0 torch.Size([20])\n", "rnn.bias_hh_l0 torch.Size([20])\n" ] } ], "source": [ "for name, param in net.named_parameters():\n", " if param.requires_grad:\n", " print(name, param.shape)" ] }, { "cell_type": "markdown", "metadata": { "id": "T1q6j-YRPkPG" }, "source": [ "As you can see we gather in single big tensors the groups of parameters. For instance, `rnn.weight_ih_l0` gathers all the four input-to-hidden matrixes of dimension [5, 20] for $f$,$i$,$o$,$c$ is a single tensor of dimension $[20,20]$. A similar concatenation is done with the hidden-to-hidden weights `rnn.weight_hh_l0` and the biases.\n", "\n", "Similarly to the vanilla RNN, we can use the parameter `bidirectional=True` to employ a bidirectional neural network. We can also stack more layers using the argument `num_layers`." ] }, { "cell_type": "markdown", "metadata": { "id": "-XwWy-wpRqC5" }, "source": [ "## 3. Gated Recurrent Units (GRUs)\n", "LSTMs rely on memory cells that are controlled by forgetting, input, and output gates. Despite their effectiveness, such a sophisticated gating mechanism might result in an overly complex model.\n", "\n", "A noteworthy attempt to **simplify LSTMs** led to a novel model called Gated Recurrent Unit (GRU), which is based on **two multiplicative gates **only. In particular, the GRU architecture is described by the following equations:\n", "\n", "$z_{t}=\\sigma(W_{z}x_{t}+U_{z}h_{t-1}+b_{z})$\n", "\n", "$r_{t}=\\sigma(W_{r}x_{t}+U_{r}h_{t-1}+b_{r})$\n", "\n", "$\\widetilde{h_{t}} =\\tanh(W_{h}x_{t}+U_{h}(h_{t-1} \\odot r_{t})+b_{h})$\n", "\n", "$h_{t}=z_{t} \\odot h_{t-1}+ (1-z_{t}) \\odot \\widetilde{h_{t}}$.\n", "\n", "where $z_{t}$ and $r_{t}$ are vectors corresponding to the update and reset gates, respectively, while $h_{t}$ represents the state vector for the current time frame $t$.\n", "Computations denoted as $\\odot$ represent element-wise multiplications.\n", "\n", "Similar to LSTM, also GRU is designed to learn long-term dependencies. GRU, in fact, can store the hidden state $h_t$ for an arbitrary number of times steps. This happens when $z_t = 1$.\n", "\n", "Let's now see how we can use a GRU within SpeechBrain:\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 377, "status": "ok", "timestamp": 1708524187110, "user": { "displayName": "adel moumen", "userId": "01620107593621714109" }, "user_tz": -60 }, "id": "P64McqyTVwjG", "outputId": "01498252-41f9-4ef8-9712-0fae98b38cab" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([4, 10, 5])\n" ] } ], "source": [ "import torch\n", "from speechbrain.nnet.RNN import GRU\n", "\n", "inp_tensor = torch.rand([4, 10, 20]) # [batch, time, features]\n", "net = GRU(hidden_size=5, input_shape=inp_tensor.shape)\n", "out_tensor, _ = net(inp_tensor)\n", "\n", "print(out_tensor.shape)" ] }, { "cell_type": "markdown", "metadata": { "id": "pnedeOypV6ha" }, "source": [ "The output tensor has the same size as the vanilla RNN and the LSTM. The parameters inside the model are different:\n", "\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 12, "status": "ok", "timestamp": 1708524187110, "user": { "displayName": "adel moumen", "userId": "01620107593621714109" }, "user_tz": -60 }, "id": "QM3gu_lAWIdY", "outputId": "38b2c02f-b393-407c-b73f-4893fa2c405a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "rnn.weight_ih_l0 torch.Size([15, 20])\n", "rnn.weight_hh_l0 torch.Size([15, 5])\n", "rnn.bias_ih_l0 torch.Size([15])\n", "rnn.bias_hh_l0 torch.Size([15])\n" ] } ], "source": [ "for name, param in net.named_parameters():\n", " if param.requires_grad:\n", " print(name, param.shape)" ] }, { "cell_type": "markdown", "metadata": { "id": "muXnwHnXWKb4" }, "source": [ "Similar to LSTM, also the GRU models gather weight matrixes in bigger tensors. In this case, the weight matrixes are smaller because we have only two gates. You can play with the bidirectional and num_layers to use bidirectional RNN or to employ more layers." ] }, { "cell_type": "markdown", "metadata": { "id": "OUGesx-7W-a6" }, "source": [ "## 4. Light Gated Recurrent Units (LiGRU)\n", "\n", "Despite the interesting performance achieved by GRUs, which is normally comparable to that of the LSTMs, a further simplification of the model is possible.\n", "\n", "Recently, a model called **light GRU** has been proposed and turned out to perform well on speech processing tasks. The model is based on a single multiplicative gate, and it is described by the following equations:\n", "\n", "$z_{t}=\\sigma(BN(W_{z}x_{t})+U_{z}h_{t-1})$\n", "\n", "$\\widetilde{h_{t}}=\\mbox{ReLU}(BN(W_{h}x_{t})+U_{h}h_{t-1})$\n", "\n", "$h_{t}=z_{t} \\odot h_{t-1}+ (1-z_{t}) \\odot \\widetilde{h_{t}}$\n", "\n", "The LiGRU can be derived from the standard GRU model with the following modifications:\n", "\n", "\n", "1. **Remove the reset gate**: in speech applications, the reset gate turned out to be redundant. In the LiGRU model, this is thus eliminated without any performance loss. As a result, the neural network is based on a single multiplicative gate only, with benefits on speed, parameters, and memory.\n", "2. **Use ReLU + BatchNorm** in the the candidate state $\\widetilde{h_{t}}$*:\n", "ReLU is the most popular activation function for feedforward neural networks. Differently from *tanh* and `sigmoids` they don't have saturation points that cause small gradients. The adoption of ReLU-based neurons was not so common in the past for the RNN architectures. This was due to numerical instabilities originating from the unbounded ReLU functions applied over long time series. To circumvent these numerical issues, LiGRU couples it with batch normalization. Batch normalization not only contributes to limit numerical issues but also to improve performance.\n", "3. **shared parameters** When using bidirectional architectures, two independent models are normally employed. The LiGRU, instead, shares the same parameters for both the left-to-right and right-to-left scan. This not only helps to reduce the total amount of parameters but also improves generalization.\n", "\n", "Let's see now how to use the LiGRU model in speechbrain:\n", "\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 9, "status": "ok", "timestamp": 1708524187110, "user": { "displayName": "adel moumen", "userId": "01620107593621714109" }, "user_tz": -60 }, "id": "T1x77D2We99i", "outputId": "f3b01bd9-78f6-49f0-cb20-2463fd523f7c" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([4, 10, 5])\n" ] } ], "source": [ "import torch\n", "from speechbrain.nnet.RNN import LiGRU\n", "\n", "inp_tensor = torch.rand([4, 10, 20]) # [batch, time, features]\n", "net = LiGRU(hidden_size=5, input_shape=inp_tensor.shape)\n", "out_tensor, _ = net(inp_tensor)\n", "\n", "print(out_tensor.shape)" ] }, { "cell_type": "markdown", "metadata": { "id": "P2BLcBY_fHJ_" }, "source": [ "As you can see the dimension in input and output are the same as the other recurrent models. The number of parameters, instead, is different:\n", "\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 7, "status": "ok", "timestamp": 1708524187111, "user": { "displayName": "adel moumen", "userId": "01620107593621714109" }, "user_tz": -60 }, "id": "4a64Jhwsfb-Y", "outputId": "2a192848-5970-4c1d-8045-a7dcb3523844" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "rnn.0.w.weight torch.Size([10, 20])\n", "rnn.0.u.weight torch.Size([10, 5])\n", "rnn.0.norm.weight torch.Size([10])\n", "rnn.0.norm.bias torch.Size([10])\n" ] } ], "source": [ "for name, param in net.named_parameters():\n", " if param.requires_grad:\n", " print(name, param.shape)" ] }, { "cell_type": "markdown", "metadata": { "id": "ndEkFRNqfe2w" }, "source": [ "If we employ a bidirectional model, the number of parameters is the same (due to parameter sharing):" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 5, "status": "ok", "timestamp": 1708524187111, "user": { "displayName": "adel moumen", "userId": "01620107593621714109" }, "user_tz": -60 }, "id": "HScHidfAfnz6", "outputId": "974c5bf9-f7fe-4b9c-a3a5-c3224184d26e" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([4, 10, 10])\n", "rnn.0.w.weight torch.Size([10, 20])\n", "rnn.0.u.weight torch.Size([10, 5])\n", "rnn.0.norm.weight torch.Size([10])\n", "rnn.0.norm.bias torch.Size([10])\n" ] } ], "source": [ "import torch\n", "from speechbrain.nnet.RNN import LiGRU\n", "\n", "inp_tensor = torch.rand([4, 10, 20]) # [batch, time, features]\n", "net = LiGRU(hidden_size=5,\n", " input_shape=inp_tensor.shape,\n", " bidirectional=True)\n", "out_tensor, _ = net(inp_tensor)\n", "\n", "print(out_tensor.shape)\n", "\n", "for name, param in net.named_parameters():\n", " if param.requires_grad:\n", " print(name, param.shape)" ] }, { "cell_type": "markdown", "metadata": { "id": "nPqsn_XVf28_" }, "source": [ "Similar to LSTM and GRU, LiGRUs can learn long-term dependency. The hidden state $h_{t}$, for instance, can be store for an arbitrary number of time steps when $z_{t}=1$.\n", "\n", "To conclude, let's compare the number of parameters employed by the different models discussed here:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 2008, "status": "ok", "timestamp": 1708524189116, "user": { "displayName": "adel moumen", "userId": "01620107593621714109" }, "user_tz": -60 }, "id": "YqEyaB04gnPz", "outputId": "21d19890-ddbe-43b3-9abc-8c62017e315a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "RNN: 0.5332992 M\n", "RNN: 2.1331968 M\n", "RNN: 1.5998976 M\n", "RNN: 0.5332992 M\n" ] } ], "source": [ "import torch\n", "from speechbrain.nnet.RNN import RNN, LSTM, GRU, LiGRU\n", "\n", "hidden_size = 512\n", "num_layers = 4\n", "bidirectional=True\n", "\n", "inp_tensor = torch.rand([4, 10, 80]) # [batch, time, features]\n", "\n", "rnn = RNN(hidden_size=hidden_size,\n", " input_shape=inp_tensor.shape,\n", " bidirectional=bidirectional,\n", " num_layers=num_layers\n", " )\n", "\n", "lstm = LSTM(hidden_size=hidden_size,\n", " input_shape=inp_tensor.shape,\n", " bidirectional=bidirectional,\n", " num_layers=num_layers\n", " )\n", "\n", "gru = GRU(hidden_size=hidden_size,\n", " input_shape=inp_tensor.shape,\n", " bidirectional=bidirectional,\n", " num_layers=num_layers\n", " )\n", "\n", "ligru = LiGRU(hidden_size=hidden_size,\n", " input_shape=inp_tensor.shape,\n", " bidirectional=bidirectional,\n", " num_layers=num_layers\n", " )\n", "\n", "\n", "def count_parameters(model):\n", " return sum(p.numel() for p in model.parameters() if p.requires_grad)\n", "\n", "print(\"RNN:\", count_parameters(rnn)/10e6, \"M\")\n", "print(\"RNN:\", count_parameters(lstm)/10e6, \"M\")\n", "print(\"RNN:\", count_parameters(gru)/10e6, \"M\")\n", "print(\"RNN:\", count_parameters(ligru)/10e6, \"M\")" ] }, { "cell_type": "markdown", "metadata": { "id": "1doJN4KjibQw" }, "source": [ "The LiGRU is very **parameter efficient** and, in the bidirectional case, has the same number of parameters as a vanilla RNN (with the advantage of being able to learn long-term dependencies).\n" ] }, { "cell_type": "markdown", "metadata": { "id": "9s3dIbhjneQ9" }, "source": [ "**## References**\n", "\n", "[1] S. Hochreiter, J. Schmidhuber, \"Long short-term memory. Neural computation\", 9, 1735--1780, 1997. [pdf](https://www.bioinf.jku.at/publications/older/2604.pdf)\n", "\n", "[2] J. Chung, C. Gulcehre, K. Cho, Y. Bengio, \"Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling\", 2014 [ArXiv](https://arxiv.org/abs/1412.3555)\n", "\n", "[3] M. Ravanelli, P. Brakel, M. Omologo, Y. Bengio, \"Light Gated Recurrent Units for Speech Recognition\", 2018 [ArXiv](https://arxiv.org/abs/1803.10225)\n", "\n", "[4] Y. Bengio; P. Simard; P. Frasconi, \"Learning long-term dependencies with gradient descent is difficult\", IEEE Transactions on Neural Networks, 1994\n", "\n", "[5] M. Ravanelli, \"Deep Learning for distant speech recogniton\", PhD thesis, 2017 [ArXiv](https://theses.eurasip.org/theses/755/deep-learning-for-distant-speech-recognition/download/)\n" ] }, { "cell_type": "markdown", "metadata": { "id": "sb_auto_footer", "tags": [ "sb_auto_footer" ] }, "source": [ "## Citing SpeechBrain\n", "\n", "If you use SpeechBrain in your research or business, please cite it using the following BibTeX entry:\n", "\n", "```bibtex\n", "@misc{speechbrainV1,\n", " title={Open-Source Conversational AI with {SpeechBrain} 1.0},\n", " author={Mirco Ravanelli and Titouan Parcollet and Adel Moumen and Sylvain de Langen and Cem Subakan and Peter Plantinga and Yingzhi Wang and Pooneh Mousavi and Luca Della Libera and Artem Ploujnikov and Francesco Paissan and Davide Borra and Salah Zaiem and Zeyu Zhao and Shucong Zhang and Georgios Karakasidis and Sung-Lin Yeh and Pierre Champion and Aku Rouhe and Rudolf Braun and Florian Mai and Juan Zuluaga-Gomez and Seyed Mahed Mousavi and Andreas Nautsch and Xuechen Liu and Sangeet Sagar and Jarod Duret and Salima Mdhaffar and Gaelle Laperriere and Mickael Rouvier and Renato De Mori and Yannick Esteve},\n", " year={2024},\n", " eprint={2407.00463},\n", " archivePrefix={arXiv},\n", " primaryClass={cs.LG},\n", " url={https://arxiv.org/abs/2407.00463},\n", "}\n", "@misc{speechbrain,\n", " title={{SpeechBrain}: A General-Purpose Speech Toolkit},\n", " author={Mirco Ravanelli and Titouan Parcollet and Peter Plantinga and Aku Rouhe and Samuele Cornell and Loren Lugosch and Cem Subakan and Nauman Dawalatabad and Abdelwahab Heba and Jianyuan Zhong and Ju-Chieh Chou and Sung-Lin Yeh and Szu-Wei Fu and Chien-Feng Liao and Elena Rastorgueva and François Grondin and William Aris and Hwidong Na and Yan Gao and Renato De Mori and Yoshua Bengio},\n", " year={2021},\n", " eprint={2106.04624},\n", " archivePrefix={arXiv},\n", " primaryClass={eess.AS},\n", " note={arXiv:2106.04624}\n", "}\n", "```" ] } ], "metadata": { "colab": { "provenance": [] }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.6" } }, "nbformat": 4, "nbformat_minor": 4 }