Your code unfortunately nests tikzpictures, which can lead to uncontrollable results. However, you are already loading decorations.markings, and using it allows you to avoid the nesting. I add two ways to answer your question, one with tikz-cd and another one with plain TikZ. For your convenience, I define styles ->-, ->>- and ->>>- for the single, double and triple arrows. (EDIT: For your convenience I added the reversed arrow styles.)
\documentclass{article}
\usepackage{tikz-cd}
\usetikzlibrary{decorations.markings}
\tikzset{> at/.style={postaction={decorate,decoration={markings,mark=at position
#1 with {\arrow{>};}}}},
->-/.style={> at=0.5},
->>-/.style={>
at/.list={0.5*\pgfdecoratedpathlength-1.5pt,0.5*\pgfdecoratedpathlength+1.5pt}},
->>>-/.style={>
at/.list={0.5*\pgfdecoratedpathlength-3pt,0.5,0.5*\pgfdecoratedpathlength+3pt}},
< at/.style={postaction={decorate,decoration={markings,mark=at position
#1 with {\arrowreversed{>};}}}},
-<-/.style={< at=0.5},
-<<-/.style={<
at/.list={0.5*\pgfdecoratedpathlength-1.5pt,0.5*\pgfdecoratedpathlength+1.5pt}},
-<<<-/.style={<
at/.list={0.5*\pgfdecoratedpathlength-3pt,0.5,0.5*\pgfdecoratedpathlength+3pt}}}
\begin{document}
\begin{tikzcd}[sep=2cm,cells={nodes={text height=1em,minimum width=0.8em}}]
a
&
b\ar[dash,l,-<-,start anchor=south west,end anchor=south east,"\ell_1"']
\\
c \ar[dash,u,->>-,start anchor=north east,end anchor=south east,"\ell_2"]
\ar[dash,r,->-,start anchor=north east,end anchor=north west,"\ell_3"']
\ar[dash,ur,->>>-,start anchor=north east,end anchor=south west,"\ell_4"]
&
d \ar[dash,u,->>-,start anchor=north west,end anchor=south west,"\ell_5"]
\end{tikzcd}
\begin{tikzpicture}
\path (0,0) coordinate[label=above left:$a$] (a)
(2,0) coordinate[label=above right:{$b$}](b)
(0,-2) coordinate[label=below left:$c$] (c)
(2,-2) coordinate[label=below right:$d$] (d)
(b) edge[->-,"$\ell_1$"'] (a)
(c) edge[->>-,"$\ell_2$"] (a)
(d) edge[->>-,"$\ell_5$"'] (b)
(c) edge[->>-,"$\ell_3$"'] (d)
(c) edge[->>>-,"$\ell_4$"] (b);
\end{tikzpicture}
\end{document}
