trochę o sieciach i trochę o muzyce i midi
This commit is contained in:
parent
e86288a1bb
commit
89ff281ba5
@ -163,7 +163,104 @@ Jednocześnie przyjmuję do wiadomości, że przypisanie sobie, w pracy dyplomow
|
|||||||
|
|
||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
\chapter{Reprezentacja muzyki}
|
\chapter{Wprowadzenie do sieci neuronowych}
|
||||||
|
|
||||||
|
W tym rozdziale przedstawię podstawy działania sieci neuronowych, opiszę działanie autoencoderów oraz modelu Seq2Seq, ponieważ tych modeli użyłem do skonstruowania architektury generującej muzykę.
|
||||||
|
|
||||||
|
\section{Regresja liniowa}
|
||||||
|
Podstawą wszystkich sieci neuronowych, jest regresja liniowa. W statystyce wykorzystywana aby wyjaśnić liniowe zalezności między zmiennymi.
|
||||||
|
|
||||||
|
Prosty model regresji liniowej dla jednej zmiennej można opisać wzorem.
|
||||||
|
|
||||||
|
\[\hat{y} = ax+b\]
|
||||||
|
|
||||||
|
gdzie,
|
||||||
|
\begin{itemize}
|
||||||
|
\item $\hat{y}$ jest to estymacja zmiennej objaśnianej,
|
||||||
|
\item $x$ jest to zmienna objaśniająca,
|
||||||
|
\item $a$ jest parametrem modelu,
|
||||||
|
\item $b$ jest wyrazem wolnym.
|
||||||
|
\end{itemize}
|
||||||
|
\medskip
|
||||||
|
|
||||||
|
Zadaniem jest znalezienie takiego parametru $a\in \mathbb{R}$ oraz wyrazu wolnego $b \in \mathbb{R}$, aby dla znanych wartości $x \in \mathbb{R}$ estymacja zmiennej objasnianej $\hat{y} \in \mathbb{R}$ najlepiej opisywała zmienną objasnaną $y \in \mathbb{R}$
|
||||||
|
|
||||||
|
\medskip
|
||||||
|
\begin{figure}[!htb]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=\linewidth]{images/linear_reg.png}
|
||||||
|
\caption{Regresja liniowa jednej zmiennej}
|
||||||
|
\label{fig:linreg}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Wartość zmiennej objaśnianej $y$ można również opisać za pomocą wielu zmiennych objaśniająych. Wtedy dla zmiennych objaśniającej $x_1, x_2, ... , x_n \in \mathbb{R}$ szukamy parametrów $\theta_1, \theta_2, ... ,\theta_n \in \mathbb{R}$. Otrzymany w ten sposób model nazywany jest również hipotezą i oznaczamy go $h(x)$.
|
||||||
|
|
||||||
|
\[h(x) = b + \theta_1x_2 + \theta_2x_2 + ... + \theta_nx_n = b + \sum_{i=1}^{n} \theta_ix_i\]
|
||||||
|
|
||||||
|
\section{Funkcja kosztu oraz metody gradientowe}
|
||||||
|
|
||||||
|
|
||||||
|
Celem uczenia modelu jest znalezienie ogólnych parametrów, aby model dla każdej pary $x, y$ zwracał wartości $\hat{y}$ najlepiej opisujące całe zjawisko według pewnego kryterium. W ten sposób jesteśmy wstanie znaleźć przybliżenie funkcji $h(x)$.
|
||||||
|
|
||||||
|
\subsection{Funkcja kosztu}
|
||||||
|
|
||||||
|
W tym celu używa się funcji $J_\theta(h)$, która zwraca wartość błędu między wartościami $h(x)$ oraz $y$ dla wszystkich obserwacji. Taka funckcja nazywana jest funkcją kosztu.
|
||||||
|
|
||||||
|
Dla przykładu regresji liniowej funkcją kosztu może być odchylenie średnio kwadratowe. Wtedy funkcja kosztu przyjmuje postać:
|
||||||
|
\[ J_\theta(h) = \frac{1}{m}\sum_{i=1}^{m}(y_i-h(x_i))^2 \]
|
||||||
|
gdzie $m \in \mathbb{N}$ jest liczbą obserwacji.
|
||||||
|
|
||||||
|
Przy zdefiniowanej funkcji kosztu, proces uczenia sprowadza się do znalezienia takich parametrów funckji $h(x)$ aby funkcja kosztu była najmniejsza. Jest to problem optymalizacyjny sprowadzający się do znalezienia globalnego minimum funkcji.
|
||||||
|
|
||||||
|
\subsection{Metoda gradientu prostego}
|
||||||
|
Jednym z algorytmów stosowanych do rozwiązania powyższego problemu optymalizacji jest metoda gradientu prostego (ang. gradient descent).
|
||||||
|
|
||||||
|
|
||||||
|
\begin{figure}[!htb]
|
||||||
|
\centering
|
||||||
|
\def\layersep{2.5cm}
|
||||||
|
\begin{tikzpicture}[shorten >=1pt,->,draw=black!50, node distance=\layersep]
|
||||||
|
|
||||||
|
\tikzstyle{every pin edge}=[<-,shorten <=1pt]
|
||||||
|
\tikzstyle{neuron}=[circle,fill=black!25,minimum size=17pt,inner sep=0pt]
|
||||||
|
\tikzstyle{input neuron}=[neuron, fill=black!50];
|
||||||
|
\tikzstyle{output neuron}=[neuron, fill=black!50];
|
||||||
|
\tikzstyle{hidden neuron}=[neuron, fill=black!50];
|
||||||
|
\tikzstyle{annot} = [text width=4em, text centered]
|
||||||
|
|
||||||
|
% Draw the input layer nodes
|
||||||
|
\foreach \name / \y in {1,...,4}
|
||||||
|
% This is the same as writing \foreach \name / \y in {1/1,2/2,3/3,4/4}
|
||||||
|
\node[input neuron, pin=left:Input \#\y] (I-\name) at (0,-\y) {};
|
||||||
|
|
||||||
|
% Draw the hidden layer nodes
|
||||||
|
\foreach \name / \y in {1,...,5}
|
||||||
|
\path[yshift=0.5cm]
|
||||||
|
node[hidden neuron] (H-\name) at (\layersep,-\y cm) {};
|
||||||
|
|
||||||
|
% Draw the output layer node
|
||||||
|
\node[output neuron,pin={[pin edge={->}]right:Output}, right of=H-3] (O) {};
|
||||||
|
|
||||||
|
% Connect every node in the input layer with every node in the
|
||||||
|
% hidden layer.
|
||||||
|
\foreach \source in {1,...,4}
|
||||||
|
\foreach \dest in {1,...,5}
|
||||||
|
\path (I-\source) edge (H-\dest);
|
||||||
|
|
||||||
|
% Connect every node in the hidden layer with the output layer
|
||||||
|
\foreach \source in {1,...,5}
|
||||||
|
\path (H-\source) edge (O);
|
||||||
|
|
||||||
|
% Annotate the layers
|
||||||
|
\node[annot,above of=H-1, node distance=1cm] (hl) {Hidden layer};
|
||||||
|
\node[annot,left of=hl] {Input layer};
|
||||||
|
\node[annot,right of=hl] {Output layer};
|
||||||
|
\end{tikzpicture}
|
||||||
|
\caption{źródlo: Przykład sieci neuronowej}
|
||||||
|
\label{fig:neuralnet1}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\chapter{Reprezentacja danych muzycznych}
|
||||||
|
|
||||||
W tym rozdziale przedstawię podstawowe koncepcje muzyczne, sposoby reprezentacji muzyki oraz omówię podstawy działania protokołu MIDI.
|
W tym rozdziale przedstawię podstawowe koncepcje muzyczne, sposoby reprezentacji muzyki oraz omówię podstawy działania protokołu MIDI.
|
||||||
|
|
||||||
@ -336,100 +433,7 @@ note_on channel=0 note=60 velocity=0 time=0
|
|||||||
Ścieżka (ang. Track) grupuje nuty aby podzielić utwór muzyczny na różne intrumenty. Protokół MIDI pozwala aby grać wiele ścieżek dzwiękowych jednocześnie, wtedy mówimy o muzyce polifonicznej lub multiintrumentalnej.
|
Ścieżka (ang. Track) grupuje nuty aby podzielić utwór muzyczny na różne intrumenty. Protokół MIDI pozwala aby grać wiele ścieżek dzwiękowych jednocześnie, wtedy mówimy o muzyce polifonicznej lub multiintrumentalnej.
|
||||||
|
|
||||||
|
|
||||||
\chapter{Wprowadzenie do sieci neuronowych}
|
|
||||||
|
|
||||||
W tym rozdziale opiszę podstawy działania sieci neuronowych.
|
|
||||||
|
|
||||||
\subsection{Regresja liniowa}
|
|
||||||
Podstawą wszystkich sieci neuronowych, jest regresja liniowa. W statystyce wykorzystywana aby wyjaśnić liniowe zalezności między zmiennymi.
|
|
||||||
|
|
||||||
Prosty model regresji liniowej dla jednej zmiennej można opisać wzorem.
|
|
||||||
|
|
||||||
\[\hat{y} = ax+b\]
|
|
||||||
|
|
||||||
gdzie,
|
|
||||||
\begin{itemize}
|
|
||||||
\item $\hat{y}$ jest to estymacja zmiennej objaśnianej,
|
|
||||||
\item $x$ jest to zmienna objaśniająca,
|
|
||||||
\item $a$ jest parametrem modelu,
|
|
||||||
\item $b$ jest wyrazem wolnym.
|
|
||||||
\end{itemize}
|
|
||||||
\medskip
|
|
||||||
|
|
||||||
Zadaniem jest znalezienie takiego parametru $a\in \mathbb{R}$ oraz wyrazu wolnego $b \in \mathbb{R}$, aby dla znanych wartości $x \in \mathbb{R}$ estymacja zmiennej objasnianej $\hat{y} \in \mathbb{R}$ najlepiej opisywała zmienną objasnaną $y \in \mathbb{R}$
|
|
||||||
|
|
||||||
\medskip
|
|
||||||
\begin{figure}[!htb]
|
|
||||||
\centering
|
|
||||||
\includegraphics[width=\linewidth]{images/linear_reg.png}
|
|
||||||
\caption{Regresja liniowa jednej zmiennej}
|
|
||||||
\label{fig:linreg}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
Wartość zmiennej objaśnianej $y$ można również opisać za pomocą wielu zmiennych objaśniająych. Wtedy dla zmiennych objaśniającej $x_1, x_2, ... , x_n \in \mathbb{R}$ szukamy parametrów $\theta_1, \theta_2, ... ,\theta_n \in \mathbb{R}$. Otrzymany w ten sposób model nazywany jest również hipotezą i oznaczamy go $h(x)$.
|
|
||||||
|
|
||||||
\[h(x) = b + \theta_1x_2 + \theta_2x_2 + ... + \theta_nx_n = b + \sum_{i=1}^{n} \theta_ix_i\]
|
|
||||||
|
|
||||||
\subsection{Uczenie modelu}
|
|
||||||
|
|
||||||
\subsubsection{Funkcja kosztu}
|
|
||||||
Celem uczenia modelu jest znalecienie ogólnych parametrów, aby model dla każdej pary $x, y$ zwracał wartości $\hat{y}$ najlepiej opisujące całe zjawisko według pewnego kryterium. W ten sposób jesteśmy wstanie znaleźć przybliżenie funkcji $h(x)$.
|
|
||||||
|
|
||||||
W tym celu używa się funcji $J_\theta(h)$, która zwraca wrtość błędu między wartościami $h(x)$ oraz $y$ dla wszystkich obserwacji. Taka funckcja nazywana jest funkcją kosztu.
|
|
||||||
|
|
||||||
Dla przykładu regresji liniowej, funkcją kosztu może być odchylenie średnio kwadratowe. Wtedy funkcja kosztu przyjmuje postać:
|
|
||||||
\[ J_\theta(h) = \frac{1}{m}\sum_{i=1}^{m}(y_i-h(x_i))^2 \]
|
|
||||||
gdzie $m \in \mathbb{N}$ jest liczbą obserwacji.
|
|
||||||
|
|
||||||
Przy zdefiniowanej funcji kosztu, proces uczenia sprowadza się do znalezienia takich parametrów funcji $h(x)$ aby funkcja kosztu była najmniejsza. Jest to problem optymalizacyjny sprowadzający się do znalezienia globalnego minimum funcji.
|
|
||||||
|
|
||||||
\subsubsection{Metoda gradientu prostego}
|
|
||||||
Jednym z algorytmów stosowanych do rozwiązania powyższego problemu optymalizacji jest metoda gradientu prostego (ang. gradient descent).
|
|
||||||
|
|
||||||
|
|
||||||
\begin{figure}[!htb]
|
|
||||||
\centering
|
|
||||||
\def\layersep{2.5cm}
|
|
||||||
\begin{tikzpicture}[shorten >=1pt,->,draw=black!50, node distance=\layersep]
|
|
||||||
|
|
||||||
\tikzstyle{every pin edge}=[<-,shorten <=1pt]
|
|
||||||
\tikzstyle{neuron}=[circle,fill=black!25,minimum size=17pt,inner sep=0pt]
|
|
||||||
\tikzstyle{input neuron}=[neuron, fill=black!50];
|
|
||||||
\tikzstyle{output neuron}=[neuron, fill=black!50];
|
|
||||||
\tikzstyle{hidden neuron}=[neuron, fill=black!50];
|
|
||||||
\tikzstyle{annot} = [text width=4em, text centered]
|
|
||||||
|
|
||||||
% Draw the input layer nodes
|
|
||||||
\foreach \name / \y in {1,...,4}
|
|
||||||
% This is the same as writing \foreach \name / \y in {1/1,2/2,3/3,4/4}
|
|
||||||
\node[input neuron, pin=left:Input \#\y] (I-\name) at (0,-\y) {};
|
|
||||||
|
|
||||||
% Draw the hidden layer nodes
|
|
||||||
\foreach \name / \y in {1,...,5}
|
|
||||||
\path[yshift=0.5cm]
|
|
||||||
node[hidden neuron] (H-\name) at (\layersep,-\y cm) {};
|
|
||||||
|
|
||||||
% Draw the output layer node
|
|
||||||
\node[output neuron,pin={[pin edge={->}]right:Output}, right of=H-3] (O) {};
|
|
||||||
|
|
||||||
% Connect every node in the input layer with every node in the
|
|
||||||
% hidden layer.
|
|
||||||
\foreach \source in {1,...,4}
|
|
||||||
\foreach \dest in {1,...,5}
|
|
||||||
\path (I-\source) edge (H-\dest);
|
|
||||||
|
|
||||||
% Connect every node in the hidden layer with the output layer
|
|
||||||
\foreach \source in {1,...,5}
|
|
||||||
\path (H-\source) edge (O);
|
|
||||||
|
|
||||||
% Annotate the layers
|
|
||||||
\node[annot,above of=H-1, node distance=1cm] (hl) {Hidden layer};
|
|
||||||
\node[annot,left of=hl] {Input layer};
|
|
||||||
\node[annot,right of=hl] {Output layer};
|
|
||||||
\end{tikzpicture}
|
|
||||||
\caption{źródlo: Przykład sieci neuronowej}
|
|
||||||
\label{fig:neuralnet1}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
|
|
||||||
\chapter{Projekt}
|
\chapter{Projekt}
|
||||||
|
Loading…
Reference in New Issue
Block a user