<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>fztym</title>
    <description>La couleur est ma joie et mon tourment</description>
    <!-- the feed lists posts, so point readers at the post index, not the profile -->
    <link>https://zty2004.github.io/blogs/</link>
    <atom:link href="https://zty2004.github.io/feed.xml" rel="self" type="application/rss+xml" />
    <language>zh-CN</language>
    <lastBuildDate>Fri, 21 Aug 2026 14:07:54 +0000</lastBuildDate>
    <generator>Jekyll 3.10.0</generator>
    <item>
      <title>Triton Learning</title>
      <link>https://zty2004.github.io/Triton-Learning/</link>
      <guid isPermaLink="true">https://zty2004.github.io/Triton-Learning/</guid>
      <pubDate>Fri, 14 Aug 2026 00:00:00 +0000</pubDate>
      <category>GPU</category>
      <category>triton</category>
      <category>PL</category><description>&lt;p&gt;This is an exercise record of problems from &lt;a href=&quot;https://xpuoj.com&quot;&gt;xpuoj&lt;/a&gt;. For better understanding, I will attach CUDA code for several problems.&lt;/p&gt;

&lt;h2 id=&quot;problem&quot;&gt;Problem&lt;/h2&gt;

&lt;h3 id=&quot;1-a--b-problem-fp16&quot;&gt;&lt;a href=&quot;https://xpuoj.com/p/1&quot;&gt;1. a += b problem (fp16)&lt;/a&gt;&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;triton&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;triton&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;triton.language&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tl&lt;/span&gt;

&lt;span class=&quot;o&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;triton&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;jit&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# similar to __global__, indicate this is a triton kernel
&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;vector_add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;A_ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# triton converts PyTorch tensor to GPU pointer
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;B_ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;constexpr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# tl.constexpr means the value must be fixed during compilation
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# program == block in cuda
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;pid&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;program_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;axis&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# triton focuses on program rather than thread/warp, it deal with a set of data in a program(block)
&lt;/span&gt;    &lt;span class=&quot;c1&quot;&gt;# offsets is a vector!
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;offsets&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pid&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;B&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;arange&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;mask&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;offsets&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;load&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;A_ptr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;offsets&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;load&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;B_ptr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;offsets&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;tl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;A_ptr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;offsets&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;run_kernel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# Tensor[fp16]
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# Tensor[fp16]
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;numel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# int64
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# set block size (similar to thread in cuda, thread size &amp;lt;= 1024)
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;BLOCK&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1024&lt;/span&gt; 
    &lt;span class=&quot;n&quot;&gt;A&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;contiguous&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# make A continuous in memory
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;B&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;contiguous&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# make B continuous in memory
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;grid&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;triton&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cdiv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;numel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BLOCK&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# ceil div &quot;,&quot; indicates this is a tuple 
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;vector_add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;grid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;](&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;numel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BLOCK&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# call triton kernel
&lt;/span&gt;    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;A&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;CUDA&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-c highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;stdint.h&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;
#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;cuda_fp16.h&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;
&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;__global__&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;vectorAdd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__half&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;__half&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int64_t&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;blockIdx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;blockDim&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;threadIdx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;extern&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;C&quot;&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;run_kernel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__half&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;__half&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int64_t&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;numel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;L&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1024&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;dim3&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gridSize&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;numel&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;L&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;dim3&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;blockSize&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;vectorAdd&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gridSize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;blockSize&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;B&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;numel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
    </item>
    <item>
      <title>Machine Learning Math Foundation (review)</title>
      <link>https://zty2004.github.io/ML-Math-Foundation/</link>
      <guid isPermaLink="true">https://zty2004.github.io/ML-Math-Foundation/</guid>
      <pubDate>Thu, 13 Aug 2026 00:00:00 +0000</pubDate>
      <category>math</category>
      <category>machine learning</category><description>&lt;p&gt;A working review of the mathematics I actually use when reading papers and
writing training code. The goal is a compromise: definitions precise enough
that nothing is hand-waved, but always followed by the engineering reading —
what the object &lt;em&gt;is&lt;/em&gt; in memory, what it costs, and how it fails numerically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 1&lt;/strong&gt; fixes the vocabulary: vectors, matrices, functions, inner
products and norms, and derivatives (gradient, Jacobian, Hessian), plus a
handful of objects that show up on nearly every page of an ML paper. It ends
with one worked example that uses almost all of it: deriving the Gated
DeltaNet state update from a squared-error loss.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to read this.&lt;/strong&gt; Every result that gets used later is stated as a
numbered theorem, with a one-line proof or proof sketch and — more usefully —
its &lt;strong&gt;instances&lt;/strong&gt; spelled out, the vector case and the matrix case side by
side, since those are the two that keep reappearing. Derivations then cite
them by number, like &lt;a href=&quot;#t6&quot;&gt;T6&lt;/a&gt;. The rule I tried to hold to: nothing is
invoked that was not stated, and nothing is stated that is not later used.&lt;/p&gt;

&lt;h2 id=&quot;conventions&quot;&gt;Conventions&lt;/h2&gt;

&lt;p&gt;Fixing notation once saves a lot of transposes later.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Symbol&lt;/th&gt;
      &lt;th&gt;Meaning&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;$a, \alpha$&lt;/td&gt;
      &lt;td&gt;scalar&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$x, y$&lt;/td&gt;
      &lt;td&gt;column vector, $x \in \mathbb{R}^{n}$ (i.e. $\mathbb{R}^{n \times 1}$)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$A, W$&lt;/td&gt;
      &lt;td&gt;matrix, $A \in \mathbb{R}^{m \times n}$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$x_i$&lt;/td&gt;
      &lt;td&gt;$i$-th entry of $x$; $a_{ij}$ entry of $A$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$a_j$&lt;/td&gt;
      &lt;td&gt;$j$-th &lt;strong&gt;column&lt;/strong&gt; of $A$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$A^\top$&lt;/td&gt;
      &lt;td&gt;transpose&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$\overline{z}$, $x^\ast$&lt;/td&gt;
      &lt;td&gt;complex conjugate, conjugate transpose&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$\langle x, y \rangle$&lt;/td&gt;
      &lt;td&gt;inner product&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$\lVert x \rVert$&lt;/td&gt;
      &lt;td&gt;norm (Euclidean unless subscripted)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$f_\theta$&lt;/td&gt;
      &lt;td&gt;function (model) with parameters $\theta$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$\hat{y}$&lt;/td&gt;
      &lt;td&gt;prediction; $y$ ground truth&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$\mathbb{E}[\cdot]$&lt;/td&gt;
      &lt;td&gt;expectation&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Three standing conventions:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Vectors are columns.&lt;/strong&gt; A “row vector” is $x^\top$.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Matrices act on the left:&lt;/strong&gt; $x \mapsto Ax$. (Deep-learning frameworks
do the opposite — see &lt;a href=&quot;#engineering-note-shape-discipline&quot;&gt;shape discipline&lt;/a&gt;.)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Indices start at 1&lt;/strong&gt; in the math, at 0 in the code. Yes, this is a
permanent source of off-by-one bugs.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;vectors&quot;&gt;Vectors&lt;/h2&gt;

&lt;h3 id=&quot;vectors-and-vector-spaces&quot;&gt;Vectors and vector spaces&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;real vector space&lt;/strong&gt; is a set $V$ with addition and scalar
multiplication satisfying the usual eight axioms (associativity and
commutativity of addition, a zero, additive inverses, a unit scalar,
compatibility of scalar multiplication, and the two distributive laws). We
almost never need the axioms directly; we need the consequence that &lt;em&gt;linear
combinations are meaningful&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The concrete space we compute in is&lt;/p&gt;

\[x =
\begin{bmatrix}
x_1 \\
\vdots \\
x_n
\end{bmatrix}
\in \mathbb{R}^{n \times 1},
\qquad
x^\top =
\begin{bmatrix}
x_1 &amp;amp; \cdots &amp;amp; x_n
\end{bmatrix}
\in \mathbb{R}^{1 \times n}.\]

&lt;p&gt;Everything else in Part 1 lives on top of $\mathbb{R}^n$.&lt;/p&gt;

&lt;h3 id=&quot;span-independence-basis-dimension&quot;&gt;Span, independence, basis, dimension&lt;/h3&gt;

&lt;p&gt;Given $v_1, \dots, v_k \in V$:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Span:&lt;/strong&gt; $\operatorname{span}(v_1,\dots,v_k) = \left\lbrace \sum_{i=1}^{k} c_i v_i : c_i \in \mathbb{R} \right\rbrace$ — the smallest subspace containing them.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Linear independence:&lt;/strong&gt; $\sum_i c_i v_i = 0 \implies c = 0$. Equivalently, no $v_i$ is redundant.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Basis:&lt;/strong&gt; an independent spanning set. Every $v \in \operatorname{span}(v_1,\dots,v_k)$ then has &lt;em&gt;unique&lt;/em&gt; coordinates $c \in \mathbb{R}^k$.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Dimension:&lt;/strong&gt; the (basis-independent) size of any basis.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical payoff: choosing a basis is exactly what turns an abstract
vector into an array of floats. A “feature vector” is a vector &lt;em&gt;plus a
committed choice of basis&lt;/em&gt; — which is why feature scaling changes results
even though the underlying geometry is “the same”.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;ML reading.&lt;/strong&gt; A dataset of $N$ samples with $d$ features is a set of
$N$ points in $\mathbb{R}^d$. The &lt;em&gt;manifold hypothesis&lt;/em&gt; says they
concentrate near a low-dimensional subset; PCA is the linear special case,
where “low-dimensional” means “a subspace of small dimension”.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;engineering-note-shape-discipline&quot;&gt;Engineering note: shape discipline&lt;/h3&gt;

&lt;p&gt;Most linear-algebra bugs are shape bugs, not math bugs. Two habits:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# 1. Annotate shapes in comments, and assert them at boundaries.
&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;attention&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# Q: (n, dk)  K: (m, dk)  V: (m, dv)
&lt;/span&gt;    &lt;span class=&quot;k&quot;&gt;assert&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;S&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;@&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;                      &lt;span class=&quot;c1&quot;&gt;# (n, m)
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;P&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;softmax&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;S&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;**&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;axis&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;P&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;@&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;V&lt;/span&gt;                     &lt;span class=&quot;c1&quot;&gt;# (n, dv)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# 2. Never rely on broadcasting to &quot;fix&quot; a rank mismatch silently.
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y_pred&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y_true&lt;/span&gt;          &lt;span class=&quot;c1&quot;&gt;# (N, 1) - (N,) -&amp;gt; (N, N)  &amp;lt;-- classic disaster
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y_pred&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reshape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y_true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reshape&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;   &lt;span class=&quot;c1&quot;&gt;# explicit, (N,)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Also note the &lt;strong&gt;transposed convention&lt;/strong&gt; in PyTorch / TensorFlow: a batch is
stored row-wise, $X \in \mathbb{R}^{N \times d}$, and a linear layer
computes $XW + \mathbf{1}b^\top$ with $W \in \mathbb{R}^{d \times k}$.
The math literature writes the same layer as $Wx + b$ with
$W \in \mathbb{R}^{k \times d}$. Both are right; mixing them is not.&lt;/p&gt;

&lt;h2 id=&quot;matrices&quot;&gt;Matrices&lt;/h2&gt;

&lt;h3 id=&quot;definition&quot;&gt;Definition&lt;/h3&gt;

\[A =
\begin{bmatrix}
a_{1,1} &amp;amp; \cdots &amp;amp; a_{1,n} \\
\vdots &amp;amp; \ddots &amp;amp; \vdots \\
a_{m,1} &amp;amp; \cdots &amp;amp; a_{m,n}
\end{bmatrix}
\in \mathbb{R}^{m \times n},
\qquad
(A^\top)_{ij} = a_{ji} \in \mathbb{R}^{n \times m}.\]

&lt;h3 id=&quot;a-matrix-is-a-linear-map&quot;&gt;A matrix &lt;em&gt;is&lt;/em&gt; a linear map&lt;/h3&gt;

&lt;p&gt;A map $T : \mathbb{R}^n \to \mathbb{R}^m$ is &lt;strong&gt;linear&lt;/strong&gt; if
$T(\alpha x + \beta y) = \alpha T(x) + \beta T(y)$.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t1&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 1 (Matrix–map correspondence).&lt;/strong&gt;
Fix the standard bases. Then&lt;/p&gt;

\[T \;\longmapsto\; \begin{bmatrix} T(e_1) &amp;amp; \cdots &amp;amp; T(e_n) \end{bmatrix}\]

&lt;p&gt;is a bijection between linear maps $\mathbb{R}^n \to \mathbb{R}^m$ and
matrices in $\mathbb{R}^{m \times n}$, and it turns composition into the
matrix product: the matrix of $S \circ T$ is the product of the matrices.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; A linear map is determined by its values on a basis, since
$T(x) = T(\sum_j x_j e_j) = \sum_j x_j T(e_j)$; and $A e_j = a_j$ recovers the
columns from the matrix. Composition: apply both sides to $e_j$. $\square$&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Instances.&lt;/em&gt; An embedding lookup is $A$ times a one-hot vector, i.e. “return
column $j$”. A rotation is the matrix whose columns are the rotated basis
vectors. A linear layer stores exactly the images of the input basis.&lt;/p&gt;

&lt;p&gt;So: &lt;em&gt;to know what a matrix does, look at where it sends the basis.&lt;/em&gt; This is
the single most useful sentence in applied linear algebra.&lt;/p&gt;

&lt;p&gt;Composition of maps is matrix multiplication,&lt;/p&gt;

\[(AB)_{ij} = \sum_{k} a_{ik} b_{kj},\]

&lt;p&gt;which by &lt;a href=&quot;#t1&quot;&gt;T1&lt;/a&gt; is why the matrix product is associative but not
commutative — composing functions is associative, and never commutative.&lt;/p&gt;

&lt;h3 id=&quot;three-views-of-the-matrixvector-product&quot;&gt;Three views of the matrix–vector product&lt;/h3&gt;

&lt;p&gt;All three readings of $Ax$ are the same arithmetic; you pick whichever
makes the argument short.&lt;/p&gt;

\[\underbrace{(Ax)_i = \sum_{j=1}^{n} a_{ij} x_j}_{\text{entrywise}}
\qquad
\underbrace{Ax = \sum_{j=1}^{n} x_j\, a_j}_{\text{column view}}
\qquad
\underbrace{(Ax)_i = \langle \tilde{a}_i, x \rangle}_{\text{row view}}\]

&lt;p&gt;where $a_j$ are columns and $\tilde a_i$ rows. The &lt;strong&gt;column view&lt;/strong&gt; says
$Ax$ is a linear combination of columns — hence $\operatorname{range}(A)$
is the column space, and “embedding lookup” is just $A$ times a one-hot
vector (&lt;a href=&quot;#t1&quot;&gt;T1&lt;/a&gt;). The &lt;strong&gt;row view&lt;/strong&gt; says each output coordinate is a
similarity score against a learned template — the standard interpretation of a
linear classifier’s logits, and the reading that will turn a matrix into a
memory in the &lt;a href=&quot;#the-setup-a-matrix-as-memory&quot;&gt;closing example&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;rank-column-space-null-space&quot;&gt;Rank, column space, null space&lt;/h3&gt;

\[\operatorname{col}(A) = \lbrace Ax \rbrace \subseteq \mathbb{R}^m,
\qquad
\ker(A) = \lbrace x : Ax = 0 \rbrace \subseteq \mathbb{R}^n,
\qquad
\operatorname{rank}(A) = \dim \operatorname{col}(A) .\]

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t2&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 2 (Rank–nullity).&lt;/strong&gt; For
$A \in \mathbb{R}^{m \times n}$,&lt;/p&gt;

\[\operatorname{rank}(A) + \dim \ker(A) = n ,
\qquad
\operatorname{rank}(A) = \operatorname{rank}(A^\top) .\]

&lt;p&gt;&lt;em&gt;Proof sketch.&lt;/em&gt; Extend a basis of $\ker(A)$ to a basis of $\mathbb{R}^n$; the
images of the added vectors form a basis of $\operatorname{col}(A)$. $\square$&lt;/p&gt;

&lt;p&gt;Read through &lt;a href=&quot;#t2&quot;&gt;T2&lt;/a&gt;, a layer with $\operatorname{rank}(A) \ll \min(m,n)$ has
a large kernel: it is doing far less work than its $mn$ parameters suggest.
That is the observation LoRA exploits, writing the update as $\Delta W = BA$
with inner dimension $r \ll d$ and paying $r(m+n)$ parameters instead of $mn$.&lt;/p&gt;

&lt;h3 id=&quot;special-matrices-worth-memorizing&quot;&gt;Special matrices worth memorizing&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Class&lt;/th&gt;
      &lt;th&gt;Definition&lt;/th&gt;
      &lt;th&gt;Why it matters&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Diagonal&lt;/td&gt;
      &lt;td&gt;$a_{ij} = 0, i \neq j$&lt;/td&gt;
      &lt;td&gt;per-coordinate scaling; $O(n)$ apply and invert&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Symmetric&lt;/td&gt;
      &lt;td&gt;$A = A^\top$&lt;/td&gt;
      &lt;td&gt;real eigenvalues, orthogonal eigenvectors&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Orthogonal&lt;/td&gt;
      &lt;td&gt;$A^\top A = I$&lt;/td&gt;
      &lt;td&gt;preserves norms and angles, $A^{-1} = A^\top$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Positive definite&lt;/td&gt;
      &lt;td&gt;$x^\top A x &amp;gt; 0\ \forall x \neq 0$&lt;/td&gt;
      &lt;td&gt;defines a metric; Hessian of a strictly convex quadratic&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Idempotent&lt;/td&gt;
      &lt;td&gt;$A^2 = A$&lt;/td&gt;
      &lt;td&gt;projection&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Sparse&lt;/td&gt;
      &lt;td&gt;mostly zeros&lt;/td&gt;
      &lt;td&gt;cost scales with nonzeros, not with $mn$&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;engineering-note-cost-and-memory-layout&quot;&gt;Engineering note: cost and memory layout&lt;/h3&gt;

&lt;p&gt;Dense $A \in \mathbb{R}^{m \times k}$ times $B \in \mathbb{R}^{k \times n}$
costs $2mkn$ FLOPs and is memory-bandwidth bound at small sizes,
compute-bound at large ones. Two consequences:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Associativity is free performance.&lt;/strong&gt; $(AB)x$ costs $O(mkn)$;
$A(Bx)$ costs $O(kn + mk)$. Same result, wildly different bills.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Row-major storage&lt;/strong&gt; (C, NumPy default) means iterating along the last
index is cache-friendly. A transpose is not free just because it is
mathematically trivial.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// contiguous, unit-stride inner loop over the last index&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;matvec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;acc&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;acc&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;acc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;beyond-matrices-tensors&quot;&gt;Beyond matrices: tensors&lt;/h3&gt;

&lt;p&gt;A $k$-th order &lt;strong&gt;tensor&lt;/strong&gt; here means an element of
$\mathbb{R}^{n_1 \times \cdots \times n_k}$ — an array with $k$ indices,
which is all frameworks mean by the word. Activations are typically
$(N, C, H, W)$ or $(B, T, d)$. Almost every operation is still a
matrix operation applied along some axes, with the rest treated as batch
dimensions. Einstein summation makes that explicit and is worth using:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# batched (B) multi-head (H) attention scores, contracting the feature axis d
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;S&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;einsum&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;bhqd,bhkd-&amp;gt;bhqk&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;functions-and-maps&quot;&gt;Functions and maps&lt;/h2&gt;

&lt;h3 id=&quot;terminology&quot;&gt;Terminology&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;function&lt;/strong&gt; $f : \mathcal{X} \to \mathcal{Y}$ assigns to each
$x \in \mathcal{X}$ (the domain) exactly one $f(x) \in \mathcal{Y}$ (the
codomain). Its &lt;strong&gt;image&lt;/strong&gt; $f(\mathcal{X})$ need not be all of
$\mathcal{Y}$. Classification by shape:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Type&lt;/th&gt;
      &lt;th&gt;Signature&lt;/th&gt;
      &lt;th&gt;Example in ML&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Scalar field&lt;/td&gt;
      &lt;td&gt;$f : \mathbb{R}^n \to \mathbb{R}$&lt;/td&gt;
      &lt;td&gt;loss $\mathcal{L}(\theta)$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Vector field / map&lt;/td&gt;
      &lt;td&gt;$f : \mathbb{R}^n \to \mathbb{R}^m$&lt;/td&gt;
      &lt;td&gt;a network layer&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Operator&lt;/td&gt;
      &lt;td&gt;$f : \mathbb{R}^{m \times n} \to \mathbb{R}$&lt;/td&gt;
      &lt;td&gt;$\det$, $\mathrm{tr}$, regularizer $\lVert W \rVert_F^2$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Functional family&lt;/td&gt;
      &lt;td&gt;$\lbrace f_\theta \rbrace_{\theta \in \Theta}$&lt;/td&gt;
      &lt;td&gt;the hypothesis class&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The last row is the whole point of supervised learning: we do not search over
“all functions”, we search over a parameterized family, and training is
optimization over $\Theta$, not over function space.&lt;/p&gt;

&lt;h3 id=&quot;linear-affine-multilinear&quot;&gt;Linear, affine, multilinear&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Linear:&lt;/strong&gt; $f(x) = Ax$. Necessarily $f(0) = 0$.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Affine:&lt;/strong&gt; $f(x) = Ax + b$. This is what a “linear layer” actually is.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Multilinear:&lt;/strong&gt; linear in each argument separately, e.g.
$(x, y) \mapsto x^\top A y$. Bilinear forms are the backbone of
attention and of second-order methods.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A composition of affine maps is affine — hence a deep network without
nonlinearities collapses to a single affine map, no matter its depth. The
nonlinearity $\sigma$ is not a detail; it is the reason depth exists.&lt;/p&gt;

&lt;h3 id=&quot;regularity-continuity-lipschitz-smoothness&quot;&gt;Regularity: continuity, Lipschitz, smoothness&lt;/h3&gt;

&lt;p&gt;$f$ is &lt;strong&gt;$L$-Lipschitz&lt;/strong&gt; on $S$ if&lt;/p&gt;

\[\lVert f(x) - f(y) \rVert \le L \lVert x - y \rVert
\quad \forall x, y \in S .\]

&lt;p&gt;For a linear map, the smallest such $L$ is the operator norm
$\lVert A \rVert_2$ (&lt;a href=&quot;#t8&quot;&gt;T8&lt;/a&gt;). Lipschitz constants are how we quantify
robustness (a small input perturbation cannot move the output much) and how we
get convergence rates for gradient descent (&lt;a href=&quot;#t21&quot;&gt;T21&lt;/a&gt;). $f \in C^k$ means $k$
continuous derivatives; ReLU networks are $C^0$ but not $C^1$, which is why
“the gradient at $0$” is a convention (subgradient), not a derivative.&lt;/p&gt;

&lt;h2 id=&quot;inner-products-norms-and-geometry&quot;&gt;Inner products, norms, and geometry&lt;/h2&gt;

&lt;h3 id=&quot;inner-product&quot;&gt;Inner product&lt;/h3&gt;

&lt;p&gt;An &lt;strong&gt;inner product&lt;/strong&gt; on a real vector space is a map
$\langle \cdot, \cdot \rangle : V \times V \to \mathbb{R}$ that is&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;symmetric:&lt;/strong&gt; $\langle x, y \rangle = \langle y, x \rangle$;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;linear in the first argument:&lt;/strong&gt; $\langle \alpha x + \beta y, z \rangle = \alpha \langle x, z \rangle + \beta \langle y, z \rangle$;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;positive definite:&lt;/strong&gt; $\langle x, x \rangle \ge 0$, with equality iff $x = 0$.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;(Real, because that is what we compute with; the complex case needs one
change, spelled out in &lt;a href=&quot;#a-note-on-complex-vectors&quot;&gt;a note below&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;On $\mathbb{R}^n$ the standard (dot) product is&lt;/p&gt;

\[\langle x, y \rangle = x^\top y = \sum_{i=1}^{n} x_i y_i .\]

&lt;p&gt;Two generalizations appear constantly:&lt;/p&gt;

\[\langle x, y \rangle_M = x^\top M y \quad (M \succ 0),
\qquad
\langle A, B \rangle_F = \mathrm{tr}(A^\top B) = \sum_{i,j} a_{ij} b_{ij}.\]

&lt;p&gt;The first is the Mahalanobis / natural-gradient inner product — it encodes
“which directions count as large”. The second treats matrices as vectors and
is what weight decay penalizes; it is also what lets us differentiate with
respect to a matrix at all (&lt;a href=&quot;#t11&quot;&gt;T11&lt;/a&gt;).&lt;/p&gt;

&lt;h4 id=&quot;a-note-on-complex-vectors&quot;&gt;A note on complex vectors&lt;/h4&gt;

&lt;p&gt;Everything above is stated over $\mathbb{R}$, which is where we compute
almost all of the time. Complex vectors — elements of $\mathbb{C}^n$ —
nevertheless turn up in Fourier transforms, in the eigenvalues of a
non-symmetric real matrix, in rotary position embeddings and in diagonal
state-space models, and the notation changes just enough to cause confusion
later, so here is the dictionary.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Over $\mathbb{R}^n$&lt;/th&gt;
      &lt;th&gt;Over $\mathbb{C}^n$&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;transpose $x^\top$&lt;/td&gt;
      &lt;td&gt;conjugate transpose $x^\ast = \overline{x}^\top$ (also written $x^H$ or $x^\dagger$)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$\langle x, y \rangle = x^\top y = \sum_i x_i y_i$&lt;/td&gt;
      &lt;td&gt;$\langle x, y \rangle = x^\ast y = \sum_i \overline{x_i} y_i$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$\lVert x \rVert^2 = x^\top x$&lt;/td&gt;
      &lt;td&gt;$\lVert x \rVert^2 = x^\ast x = \sum_i \lvert x_i \rvert^2$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;symmetric, $A = A^\top$&lt;/td&gt;
      &lt;td&gt;Hermitian, $A = A^\ast$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;orthogonal, $Q^\top Q = I$&lt;/td&gt;
      &lt;td&gt;unitary, $U^\ast U = I$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;spectral theorem, $A = Q \Lambda Q^\top$&lt;/td&gt;
      &lt;td&gt;spectral theorem, $A = U \Lambda U^\ast$&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Exactly one axiom changes. Symmetry becomes &lt;strong&gt;conjugate&lt;/strong&gt; symmetry,&lt;/p&gt;

\[\langle x, y \rangle = \overline{\langle y, x \rangle} ,\]

&lt;p&gt;so the form is linear in one argument and conjugate-linear in the other
(&lt;em&gt;sesquilinear&lt;/em&gt;, “one and a half times linear”) rather than bilinear. Which
argument carries the conjugate is pure convention — physics conjugates the
first, much of the math literature the second — and it only ever flips a bar,
so check a paper once and move on.&lt;/p&gt;

&lt;p&gt;The reason for all the conjugation is the third axiom. Without it, lengths
break: for $x = (1, i)^\top \in \mathbb{C}^2$,&lt;/p&gt;

\[x^\top x = 1 + i^2 = 0
\quad \text{while} \quad
x^\ast x = \lvert 1 \rvert^2 + \lvert i \rvert^2 = 2 ,\]

&lt;p&gt;so the unconjugated form assigns length zero to a nonzero vector, and
$\langle x, x \rangle$ is no longer even guaranteed to be real. Conjugation is
the minimal repair that keeps $\langle x, x \rangle \ge 0$, and therefore keeps
geometry.&lt;/p&gt;

&lt;p&gt;Once that is in place, nothing else in this post needs relearning:
$\mathbb{C}^n$ with the Hermitian product is a perfectly ordinary inner-product
space, so &lt;a href=&quot;#t3&quot;&gt;T3&lt;/a&gt;–&lt;a href=&quot;#t7&quot;&gt;T7&lt;/a&gt; — Cauchy–Schwarz, Riesz, adjoints, projection —
all hold verbatim with $\top$ replaced by $\ast$. Two practical asides worth
remembering:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Where the complex numbers come from.&lt;/strong&gt; A real &lt;em&gt;symmetric&lt;/em&gt; matrix has real
eigenvalues, but a general real matrix does not: its complex eigenvalues
arrive in conjugate pairs $\lambda = re^{\pm i\theta}$, which is precisely
rotation by $\theta$ combined with scaling by $r$. That is why a linear
recurrence can oscillate, and why $\lvert \lambda \rvert &amp;lt; 1$ — not
$\lambda &amp;lt; 1$ — is the stability condition.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Storage.&lt;/strong&gt; A complex number is two floats, and complex arithmetic costs
more per FLOP; libraries therefore keep real signals real and only pay for
$\mathbb{C}$ where the algorithm demands it (an FFT-based convolution, for
instance, pays it to turn an $O(n^2)$ operation into $O(n \log n)$).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;induced-norm-and-cauchyschwarz&quot;&gt;Induced norm and Cauchy–Schwarz&lt;/h3&gt;

&lt;p&gt;Every inner product induces a norm $\lVert x \rVert = \sqrt{\langle x, x \rangle}$.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t3&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 3 (Cauchy–Schwarz).&lt;/strong&gt; For all
$x, y \in V$,&lt;/p&gt;

\[\lvert \langle x, y \rangle \rvert \le \lVert x \rVert \, \lVert y \rVert ,\]

&lt;p&gt;with equality if and only if $x$ and $y$ are linearly dependent.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; For $y \neq 0$ put $t = \langle x, y \rangle / \lVert y \rVert^2$. Then&lt;/p&gt;

\[0 \le \lVert x - t y \rVert^2 = \lVert x \rVert^2 - \frac{\langle x, y \rangle^2}{\lVert y \rVert^2} ,\]

&lt;p&gt;which rearranges to the claim; equality forces $x = ty$. $\square$&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;#t3&quot;&gt;T3&lt;/a&gt; is what makes the angle &lt;em&gt;definable&lt;/em&gt; in the first place — the
quotient below is guaranteed to land in $[-1,1]$:&lt;/p&gt;

\[\cos \vartheta = \frac{\langle x, y \rangle}{\lVert x \rVert \lVert y \rVert} \in [-1, 1] ,\]

&lt;p&gt;which is cosine similarity — geometry recovered from algebra alone, valid in
$\mathbb{R}^{768}$ where intuition has long since given up. The same theorem
returns later as the entire content of steepest descent (&lt;a href=&quot;#t15&quot;&gt;T15&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&quot;representing-functionals-riesz&quot;&gt;Representing functionals: Riesz&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;linear functional&lt;/strong&gt; on $V$ is a linear map $\varphi : V \to \mathbb{R}$ — a
measurement that eats a vector and returns a number. Derivatives are
functionals, which is why the next theorem quietly underwrites the whole
derivative chapter.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t4&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 4 (Riesz representation, finite-dimensional).&lt;/strong&gt;
Let $V$ be a finite-dimensional real inner-product space and
$\varphi : V \to \mathbb{R}$ linear. Then there exists a &lt;strong&gt;unique&lt;/strong&gt; $g \in V$
with&lt;/p&gt;

\[\varphi(h) = \langle g, h \rangle \qquad \text{for all } h \in V .\]

&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; Take an orthonormal basis $e_1, \dots, e_n$ and set
$g = \sum_i \varphi(e_i) e_i$. Both sides are linear in $h$ and agree on each
$e_i$, hence agree everywhere; uniqueness is &lt;a href=&quot;#t5&quot;&gt;T5&lt;/a&gt;. $\square$&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Instances.&lt;/em&gt;&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;$V$&lt;/th&gt;
      &lt;th&gt;inner product&lt;/th&gt;
      &lt;th&gt;a functional looks like&lt;/th&gt;
      &lt;th&gt;its representer $g$&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;$\mathbb{R}^n$&lt;/td&gt;
      &lt;td&gt;$x^\top y$&lt;/td&gt;
      &lt;td&gt;$h \mapsto c^\top h$&lt;/td&gt;
      &lt;td&gt;the column vector $c$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$\mathbb{R}^n$&lt;/td&gt;
      &lt;td&gt;$x^\top M y$, $M \succ 0$&lt;/td&gt;
      &lt;td&gt;$h \mapsto c^\top h$&lt;/td&gt;
      &lt;td&gt;$M^{-1} c$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$\mathbb{R}^{m \times n}$&lt;/td&gt;
      &lt;td&gt;$\mathrm{tr}(A^\top B)$&lt;/td&gt;
      &lt;td&gt;$H \mapsto \mathrm{tr}(C^\top H)$&lt;/td&gt;
      &lt;td&gt;the matrix $C$, same shape&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Row two is worth staring at: &lt;strong&gt;the same functional has different representers
under different inner products.&lt;/strong&gt; The measurement is fixed; the vector
representing it is not. That is the seed of natural gradient and of Adam.
Row three says a functional on matrix space is represented by a &lt;em&gt;matrix of the
same shape&lt;/em&gt; — which is why PyTorch can store &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;p.grad&lt;/code&gt; alongside &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;p&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t5&quot;&gt;&lt;/a&gt;&lt;strong&gt;Corollary 5 (Uniqueness of representers).&lt;/strong&gt;
If $\langle g_1, h \rangle = \langle g_2, h \rangle$ for every $h \in V$, then
$g_1 = g_2$.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; Take $h = g_1 - g_2$, giving $\lVert g_1 - g_2 \rVert^2 = 0$; positive
definiteness finishes it. $\square$&lt;/p&gt;

&lt;p&gt;Trivial to prove, used everywhere: &lt;a href=&quot;#t5&quot;&gt;T5&lt;/a&gt; is the licence to &lt;em&gt;read an object
off a pairing&lt;/em&gt;, which is the only technique the derivative chapter really uses.&lt;/p&gt;

&lt;h3 id=&quot;adjoints-where-every-transpose-comes-from&quot;&gt;Adjoints: where every transpose comes from&lt;/h3&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t6&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 6 (Adjoint).&lt;/strong&gt; Let $T : V \to W$
be linear between finite-dimensional real inner-product spaces. Then there is
a unique linear map $T^\ast : W \to V$ with&lt;/p&gt;

\[\langle u, T v \rangle_W = \langle T^\ast u, v \rangle_V
\qquad \text{for all } v \in V, \; u \in W .\]

&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; Fix $u \in W$. Then $v \mapsto \langle u, Tv \rangle_W$ is a linear
functional on $V$, so &lt;a href=&quot;#t4&quot;&gt;T4&lt;/a&gt; provides a unique representer; define
$T^\ast u$ to be it. Linearity in $u$ follows from uniqueness (&lt;a href=&quot;#t5&quot;&gt;T5&lt;/a&gt;). $\square$&lt;/p&gt;

&lt;p&gt;An adjoint is therefore not a formula to memorize but the answer to one
question: &lt;em&gt;how do I move an operator to the other side of an inner product?&lt;/em&gt;
These four instances cover essentially every gradient computation in this post.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;$T$&lt;/th&gt;
      &lt;th&gt;$T^\ast$&lt;/th&gt;
      &lt;th&gt;the identity it produces&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;$x \mapsto Ax$&lt;/td&gt;
      &lt;td&gt;$u \mapsto A^\top u$&lt;/td&gt;
      &lt;td&gt;$\langle u, Ax \rangle = \langle A^\top u, x \rangle$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$H \mapsto Hk$&lt;/td&gt;
      &lt;td&gt;$r \mapsto r k^\top$&lt;/td&gt;
      &lt;td&gt;$\langle r, Hk \rangle = \langle r k^\top, H \rangle_F$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$X \mapsto BX$&lt;/td&gt;
      &lt;td&gt;$Y \mapsto B^\top Y$&lt;/td&gt;
      &lt;td&gt;$\langle Y, BX \rangle_F = \langle B^\top Y, X \rangle_F$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$X \mapsto XC$&lt;/td&gt;
      &lt;td&gt;$Y \mapsto Y C^\top$&lt;/td&gt;
      &lt;td&gt;$\langle Y, XC \rangle_F = \langle Y C^\top, X \rangle_F$&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Row one is the familiar one and lives entirely in vector space. Row two is the
odd one out and the most useful: the operator maps &lt;em&gt;matrix&lt;/em&gt; space to &lt;em&gt;vector&lt;/em&gt;
space ($H \in \mathbb{R}^{d_v \times d_k} \mapsto Hk \in \mathbb{R}^{d_v}$), so
its adjoint goes back the other way, turning an error vector into a matrix.
Its proof is one regrouping of a double sum:&lt;/p&gt;

\[\langle r, Hk \rangle
= \sum_i r_i \sum_j H_{ij} k_j
= \sum_{i,j} H_{ij} \, (r_i k_j)
= \langle r k^\top, H \rangle_F .\]

&lt;p&gt;Same number, two readings: on the left a pairing in $\mathbb{R}^{d_v}$, on the
right a pairing in matrix space — the subscript $F$ is the only warning that
the space changed. Taking $H = A$, $r = x$, $k = y$ gives the identity in the
form it is usually quoted,&lt;/p&gt;

\[\langle x, A y \rangle = x^\top A y = \mathrm{tr}(A^\top x y^\top) = \langle A, x y^\top \rangle_F ,\]

&lt;p&gt;and it explains why outer products are everywhere in learning rules.&lt;/p&gt;

&lt;p&gt;Which instance to reach for is decided by one question — &lt;strong&gt;which slot holds the
variable?&lt;/strong&gt;&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;The variable is&lt;/th&gt;
      &lt;th&gt;Use&lt;/th&gt;
      &lt;th&gt;The constants leave behind&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;a vector, the operator is fixed&lt;/td&gt;
      &lt;td&gt;row 1&lt;/td&gt;
      &lt;td&gt;a &lt;strong&gt;transpose&lt;/strong&gt;, $A^\top r$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;the matrix itself&lt;/td&gt;
      &lt;td&gt;row 2&lt;/td&gt;
      &lt;td&gt;an &lt;strong&gt;outer product&lt;/strong&gt;, $r k^\top$&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;When the matrix &lt;em&gt;is&lt;/em&gt; the variable you cannot move it across the pairing — it
has to end up in the slot you are reading against. So instead you change which
space you pair in, and the surrounding constants collapse into a rank-one
matrix. Every $k^\top$ dangling at the end of a learning rule is this.&lt;/p&gt;

&lt;h3 id=&quot;orthogonality-and-projection&quot;&gt;Orthogonality and projection&lt;/h3&gt;

&lt;p&gt;$x \perp y$ iff $\langle x, y \rangle = 0$.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t7&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 7 (Orthogonal projection).&lt;/strong&gt; Let
$U \subseteq V$ be a subspace. Every $y \in V$ splits uniquely as&lt;/p&gt;

\[y = \hat{y} + e, \qquad \hat{y} \in U, \quad e \perp U ,\]

&lt;p&gt;and $\hat{y}$ is the unique minimizer of $\lVert y - u \rVert$ over $u \in U$.
For a single direction $x$, and for $U = \operatorname{col}(A)$ with $A$ of
full column rank,&lt;/p&gt;

\[\operatorname{proj}_x(y) = \frac{\langle x, y \rangle}{\langle x, x \rangle} x ,
\qquad
\hat{y} = P_A y, \quad P_A = A (A^\top A)^{-1} A^\top ,\]

&lt;p&gt;and $P_A^\top = P_A = P_A^2$.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Proof sketch.&lt;/em&gt; Existence and uniqueness of the split come from expanding in an
orthonormal basis of $U$. Minimality: for $u \in U$,
$\lVert y - u \rVert^2 = \lVert e \rVert^2 + \lVert \hat{y} - u \rVert^2$ by
orthogonality (Pythagoras), minimized exactly at $u = \hat{y}$. The formula
follows from forcing $A^\top e = 0$. $\square$&lt;/p&gt;

&lt;p&gt;The last line of that proof is the &lt;strong&gt;normal equations&lt;/strong&gt;, so &lt;a href=&quot;#t7&quot;&gt;T7&lt;/a&gt; says
least squares &lt;em&gt;is&lt;/em&gt; projection: the residual is orthogonal to every column,
i.e. to everything the model could have expressed. “Fitting” and “projecting”
are the same verb. Two instances used later: $P_A$ for least squares, and
$I - kk^\top / \lVert k \rVert^2$, which deletes the $k$ direction and shows up
as the &lt;em&gt;erase&lt;/em&gt; half of the &lt;a href=&quot;#the-same-update-as-erase-then-write&quot;&gt;closing example&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;norms-and-the-geometry-of-sparsity&quot;&gt;Norms, and the geometry of sparsity&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;norm&lt;/strong&gt; satisfies $\lVert x \rVert = 0 \Leftrightarrow x = 0$,
$\lVert \alpha x \rVert = \lvert \alpha \rvert \lVert x \rVert$, and the
triangle inequality. The $\ell_p$ family:&lt;/p&gt;

\[\lVert x \rVert_p = \Big( \sum_{i=1}^n \lvert x_i \rvert^p \Big)^{1/p}
\ (p \ge 1),
\qquad
\lVert x \rVert_\infty = \max_i \lvert x_i \rvert .\]

&lt;p&gt;All norms on $\mathbb{R}^n$ are equivalent (each bounds the other up to
constants), so they agree on what “converges”. They disagree on &lt;em&gt;shape&lt;/em&gt;: the
$\ell_1$ ball is a polytope with vertices on the axes, so the optimum of a
smooth loss constrained to it tends to land on a vertex — coordinates exactly
zero. That, not any probabilistic story, is the geometric reason $\ell_1$
induces sparsity.&lt;/p&gt;

&lt;p&gt;Matrix norms used everywhere:&lt;/p&gt;

\[\lVert A \rVert_F = \sqrt{\mathrm{tr}(A^\top A)},
\qquad
\lVert A \rVert_2 = \sup_{x \neq 0} \frac{\lVert A x \rVert_2}{\lVert x \rVert_2} .\]

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t8&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 8 (Operator norm).&lt;/strong&gt; For
$A \in \mathbb{R}^{m \times n}$:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;$\lVert A \rVert_2 = \sigma_{\max}(A)$, the largest singular value (&lt;a href=&quot;#t18&quot;&gt;T18&lt;/a&gt;);&lt;/li&gt;
  &lt;li&gt;$\lVert A x \rVert_2 \le \lVert A \rVert_2 \lVert x \rVert_2$ for every $x$, and $\lVert A \rVert_2$ is the smallest constant with that property;&lt;/li&gt;
  &lt;li&gt;$\lVert AB \rVert_2 \le \lVert A \rVert_2 \lVert B \rVert_2$.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; (2) is the definition of the supremum, read forwards and backwards.
(3) applies (2) twice. (1) is read off the SVD $A = U \Sigma V^\top$: the
orthogonal factors preserve norms, so the amplification is decided by the
largest diagonal entry of $\Sigma$. $\square$&lt;/p&gt;

&lt;p&gt;So &lt;a href=&quot;#t8&quot;&gt;T8&lt;/a&gt; is the &lt;strong&gt;amplification factor&lt;/strong&gt; of a layer, and it supplies the
Lipschitz constant promised earlier. Chaining (3) across depth is the one-line
explanation of exploding and vanishing signals — a product of factors each
above or below $1$ — and the motivation for spectral normalization.&lt;/p&gt;

&lt;h3 id=&quot;engineering-note-similarity-in-practice&quot;&gt;Engineering note: similarity in practice&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Cosine similarity = dot product &lt;strong&gt;after&lt;/strong&gt; normalization. Normalize once at
index-build time; then retrieval is a single matrix product $Q E^\top$.&lt;/li&gt;
  &lt;li&gt;$\lVert x - y \rVert^2 = \lVert x \rVert^2 - 2\langle x, y \rangle + \lVert y \rVert^2$
turns a pairwise-distance computation into one GEMM plus two row sums.
Beware: the cancellation in that identity loses precision in float32 for
nearby points — clamp negatives to zero before taking the square root.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;derivatives&quot;&gt;Derivatives&lt;/h2&gt;

&lt;p&gt;This chapter has almost no new content: it is the definition below, plus
Riesz (&lt;a href=&quot;#t4&quot;&gt;T4&lt;/a&gt;) and adjoints (&lt;a href=&quot;#t6&quot;&gt;T6&lt;/a&gt;) applied over and over.&lt;/p&gt;

&lt;h3 id=&quot;the-derivative-as-a-linear-map&quot;&gt;The derivative as a linear map&lt;/h3&gt;

&lt;p&gt;This is the definition worth internalizing, because it makes every later
formula a shape check rather than a memory test.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Definition (Fréchet derivative).&lt;/strong&gt; $f : \mathbb{R}^n \to \mathbb{R}^m$ is
&lt;strong&gt;differentiable&lt;/strong&gt; at $x$ if there exists a &lt;em&gt;linear&lt;/em&gt; map
$Df(x) : \mathbb{R}^n \to \mathbb{R}^m$ such that&lt;/p&gt;

\[f(x + h) = f(x) + Df(x)\,h + o(\lVert h \rVert), \qquad h \to 0 .\]

&lt;p&gt;Here $o(\lVert h \rVert)$ means a remainder $r(h)$ with
$\lVert r(h) \rVert / \lVert h \rVert \to 0$ — it vanishes faster than $h$
itself. So a derivative is &lt;em&gt;the best linear approximation of $f$ near $x$&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t9&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 9 (Uniqueness of the derivative).&lt;/strong&gt;
At a given $x$ there is at most one linear map satisfying the definition.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; If $L_1, L_2$ both work, subtract the two expansions: the linear map
$L = L_1 - L_2$ satisfies $\lVert L h \rVert = o(\lVert h \rVert)$. Fix a
direction $u$ and put $h = tu$; linearity gives
$\lVert L u \rVert = \lVert L(tu) \rVert / t \to 0$, so $Lu = 0$ for every
$u$. $\square$&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;#t9&quot;&gt;T9&lt;/a&gt; looks pedantic and is not: it is what makes “expand and match the
linear term” a &lt;em&gt;proof&lt;/em&gt; rather than a heuristic (&lt;a href=&quot;#t12&quot;&gt;T12&lt;/a&gt;). One practical
warning in the other direction: autodiff happily returns a number at points
where $f$ is not differentiable (e.g. $\mathrm{ReLU}$ at $0$) — there it
reports a convention, not a derivative.&lt;/p&gt;

&lt;h3 id=&quot;partial-derivative-and-jacobian&quot;&gt;Partial derivative and Jacobian&lt;/h3&gt;

&lt;p&gt;For $f = (f_1, \dots, f_m)^\top$, the &lt;strong&gt;Jacobian&lt;/strong&gt; collects all first-order
partials:&lt;/p&gt;

\[J_f(x) = \frac{\partial f}{\partial x} =
\begin{bmatrix}
\dfrac{\partial f_1}{\partial x_1} &amp;amp; \cdots &amp;amp; \dfrac{\partial f_1}{\partial x_n} \\
\vdots &amp;amp; \ddots &amp;amp; \vdots \\
\dfrac{\partial f_m}{\partial x_1} &amp;amp; \cdots &amp;amp; \dfrac{\partial f_m}{\partial x_n}
\end{bmatrix}
\in \mathbb{R}^{m \times n} .\]

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t10&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 10 (Jacobian, and when partials suffice).&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;If $f$ is differentiable at $x$, then the matrix of $Df(x)$ in the standard bases is $J_f(x)$ — so all partials exist and $Df(x)h = J_f(x)h$.&lt;/li&gt;
  &lt;li&gt;If all partials exist and are &lt;strong&gt;continuous&lt;/strong&gt; near $x$, then $f$ is differentiable at $x$ (i.e. $f \in C^1 \Rightarrow$ differentiable).&lt;/li&gt;
  &lt;li&gt;The converse of (1) fails: partials can all exist while $f$ is not differentiable, nor even continuous.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; (1) Apply the definition with $h = t e_j$ and read the $j$-th column.
(2) Standard: interpolate one coordinate at a time and apply the mean value
theorem to each, using continuity to control the error uniformly.
(3) Counterexample: $f(x, y) = xy/(x^2 + y^2)$ with $f(0,0) = 0$ has both
partials equal to $0$ at the origin, yet is not continuous there — approach
along $y = x$ and it tends to $1/2$. $\square$&lt;/p&gt;

&lt;p&gt;So by &lt;a href=&quot;#t10&quot;&gt;T10&lt;/a&gt; the honest working assumption is $C^1$, which is what (2)
buys: on that class, Jacobians and derivatives are interchangeable.&lt;/p&gt;

&lt;p&gt;Mnemonic for the shape: &lt;strong&gt;rows index outputs, columns index inputs&lt;/strong&gt; — forced
by “it must multiply an input perturbation $h \in \mathbb{R}^n$ to give an
output perturbation in $\mathbb{R}^m$”. This is &lt;em&gt;numerator layout&lt;/em&gt;; the
transposed (denominator) layout is equally common in the literature, so always
check a paper’s convention before trusting a transpose.&lt;/p&gt;

&lt;h3 id=&quot;gradient&quot;&gt;Gradient&lt;/h3&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t11&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 11 (Gradient).&lt;/strong&gt; Let $V$ be a
finite-dimensional real inner-product space and $f : V \to \mathbb{R}$
differentiable at $x$. Then there is a unique $\nabla f(x) \in V$ with&lt;/p&gt;

\[Df(x)\,h = \langle \nabla f(x), h \rangle \qquad \text{for all } h \in V .\]

&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; $Df(x)$ is a linear functional on $V$ — it eats a displacement and
returns a number — so &lt;a href=&quot;#t4&quot;&gt;T4&lt;/a&gt; applies verbatim. $\square$&lt;/p&gt;

&lt;p&gt;That is the entire content of the gradient, and it is worth naming what just
happened: $Df(x)$ and $\nabla f(x)$ are &lt;strong&gt;different objects&lt;/strong&gt;. The derivative
is a functional (a row, a covector, “loss per unit displacement”); the
gradient is the vector that represents it, and it lives in the same space as
$x$. Which vector that is depends on the inner product:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;$V$ with its inner product&lt;/th&gt;
      &lt;th&gt;$\nabla f(x)$&lt;/th&gt;
      &lt;th&gt;name&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;$\mathbb{R}^n$, $x^\top y$&lt;/td&gt;
      &lt;td&gt;$Df(x)^\top$, the column of partials&lt;/td&gt;
      &lt;td&gt;the familiar gradient&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$\mathbb{R}^n$, $x^\top M y$&lt;/td&gt;
      &lt;td&gt;$M^{-1} Df(x)^\top$&lt;/td&gt;
      &lt;td&gt;natural gradient&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$\mathbb{R}^{m \times n}$, $\langle \cdot, \cdot \rangle_F$&lt;/td&gt;
      &lt;td&gt;a matrix shaped like $W$&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;#gradients-with-respect-to-a-matrix&quot;&gt;matrix gradient&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;In coordinates with the standard product this is the formula everyone knows:&lt;/p&gt;

\[\nabla f(x) = Df(x)^\top =
\begin{bmatrix}
\dfrac{\partial f}{\partial x_1} \\ \vdots \\ \dfrac{\partial f}{\partial x_n}
\end{bmatrix}
\in \mathbb{R}^{n} .\]

&lt;p&gt;Two consequences worth stating out loud:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Type correctness.&lt;/strong&gt; $\theta \leftarrow \theta - \eta \nabla \mathcal{L}(\theta)$
parses only because &lt;a href=&quot;#t11&quot;&gt;T11&lt;/a&gt; moved the derivative into $\theta$’s own
space; $\theta - \eta D\mathcal{L}(\theta)$ would be a type error.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The gradient is not canonical.&lt;/strong&gt; Row two: the derivative is fixed by $f$,
but the gradient also depends on the metric you chose. Natural gradient and
Adam are that freedom being spent deliberately.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;reading-a-gradient-off-the-first-order-term&quot;&gt;Reading a gradient off the first-order term&lt;/h4&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t12&quot;&gt;&lt;/a&gt;&lt;strong&gt;Corollary 12 (First-order reading rule).&lt;/strong&gt;
If for some $g \in V$&lt;/p&gt;

\[f(x + h) = f(x) + \langle g, h \rangle + o(\lVert h \rVert) ,\]

&lt;p&gt;then $f$ is differentiable at $x$ and $\nabla f(x) = g$.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; $h \mapsto \langle g, h \rangle$ is linear, so the displayed line &lt;em&gt;is&lt;/em&gt;
the definition of differentiability; &lt;a href=&quot;#t9&quot;&gt;T9&lt;/a&gt; makes that linear map unique and
&lt;a href=&quot;#t5&quot;&gt;T5&lt;/a&gt; makes its representer unique. $\square$&lt;/p&gt;

&lt;p&gt;This turns the usual “differentiate term by term” ritual into a method:
&lt;strong&gt;expand $f(x+h)$, isolate the part linear in $h$, force it into the shape
$\langle g, h \rangle$, and $g$ is the gradient&lt;/strong&gt; — no table lookups, and no
layout conventions to get wrong. Two instances we will need later.&lt;/p&gt;

&lt;p&gt;First, $f(x) = x^\top x$. Expanding costs one line:&lt;/p&gt;

\[f(x + h) = (x + h)^\top (x + h) = x^\top x + 2 x^\top h + h^\top h .\]

&lt;p&gt;The last term is $\lVert h \rVert^2 = o(\lVert h \rVert)$, so the linear part
is $2 x^\top h = \langle 2x, h \rangle$ and &lt;a href=&quot;#t12&quot;&gt;T12&lt;/a&gt; gives&lt;/p&gt;

\[\nabla_x \, x^\top x = 2x, \qquad \nabla_x \tfrac{1}{2} \lVert x \rVert^2 = x .\]

&lt;p&gt;Second, $f(x) = \frac{1}{2} \lVert Ax - b \rVert^2$. Put $r = Ax - b$; then
perturbing $x$ by $h$ perturbs the residual by $Ah$, and&lt;/p&gt;

\[f(x + h) = \tfrac{1}{2} \lVert r + Ah \rVert^2
= f(x) + \langle r, Ah \rangle + \tfrac{1}{2} \lVert Ah \rVert^2 .\]

&lt;p&gt;Now the only move that matters, and it is not a trick: push $A$ off the second
argument and onto the first. That is &lt;a href=&quot;#t6&quot;&gt;T6&lt;/a&gt;, row one,
$\langle r, Ah \rangle = \langle A^\top r, h \rangle$. The linear term is now
in the shape $\langle g, h \rangle$, so by &lt;a href=&quot;#t12&quot;&gt;T12&lt;/a&gt;&lt;/p&gt;

\[\nabla f(x) = A^\top r = A^\top (Ax - b) .\]

&lt;p&gt;That transpose was not pulled from a table — it is the adjoint of
$h \mapsto Ah$, and by &lt;a href=&quot;#t6&quot;&gt;T6&lt;/a&gt; every transpose in every backprop formula
arrives the same way.&lt;/p&gt;

&lt;h3 id=&quot;directional-derivative-and-steepest-descent&quot;&gt;Directional derivative and steepest descent&lt;/h3&gt;

\[D_u f(x) = \lim_{t \to 0} \frac{f(x + tu) - f(x)}{t} = \langle \nabla f(x), u \rangle .\]

&lt;p&gt;By Cauchy–Schwarz, over unit $u$ this is maximized at
$u = \nabla f / \lVert \nabla f \rVert$ and minimized at its negation.
Hence: &lt;strong&gt;the negative gradient is the steepest-descent direction&lt;/strong&gt; — a
one-line consequence of the inner-product geometry, not a separate fact.
Note it is steepest only with respect to the &lt;em&gt;chosen&lt;/em&gt; norm, which is exactly
the loophole Adam and natural gradient exploit.&lt;/p&gt;

&lt;h3 id=&quot;chain-rule&quot;&gt;Chain rule&lt;/h3&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t13&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 13 (Chain rule).&lt;/strong&gt; If
$f : \mathbb{R}^n \to \mathbb{R}^k$ is differentiable at $x$ and
$g : \mathbb{R}^k \to \mathbb{R}^m$ at $f(x)$, then $g \circ f$ is
differentiable at $x$ and&lt;/p&gt;

\[D(g \circ f)(x) = Dg(f(x)) \, Df(x)
\qquad (m \times k)(k \times n) = (m \times n) .\]

&lt;p&gt;&lt;em&gt;Proof sketch.&lt;/em&gt; Substitute the expansion of $f$ into that of $g$; the two
leftover terms are still $o(\lVert h \rVert)$ because a linear map cannot
amplify by more than a fixed factor (&lt;a href=&quot;#t8&quot;&gt;T8&lt;/a&gt;). $\square$&lt;/p&gt;

&lt;p&gt;Composition of derivatives is a product of Jacobians — the shapes could not
line up any other way.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t14&quot;&gt;&lt;/a&gt;&lt;strong&gt;Corollary 14 (Backprop form).&lt;/strong&gt; For a
scalar loss on a depth-$L$ network,
$\mathcal{L} = \ell \circ f_L \circ \cdots \circ f_1$,&lt;/p&gt;

\[\nabla_x \mathcal{L} = J_1^\top J_2^\top \cdots J_L^\top \, \nabla \ell .\]

&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; &lt;a href=&quot;#t13&quot;&gt;T13&lt;/a&gt; gives $D\mathcal{L} = D\ell \cdot J_L \cdots J_1$; then
&lt;a href=&quot;#t11&quot;&gt;T11&lt;/a&gt; says the gradient is the transpose of that row, and transposing a
product reverses the order. Each $J_i^\top$ is the adjoint of layer $i$
(&lt;a href=&quot;#t6&quot;&gt;T6&lt;/a&gt;), which is &lt;em&gt;why&lt;/em&gt; the backward pass looks like the forward pass run
backwards. $\square$&lt;/p&gt;

&lt;p&gt;Backpropagation is nothing more than choosing to evaluate the product in
&lt;a href=&quot;#t14&quot;&gt;T14&lt;/a&gt; &lt;strong&gt;right to left&lt;/strong&gt;, so that every intermediate is a vector rather
than a matrix.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;flowchart LR
    X[x] --&amp;gt;|f1| H1[h1] --&amp;gt;|f2| H2[h2] --&amp;gt;|fL| Y[loss]
    Y -.-&amp;gt;|&quot;vᵀ J_L&quot;| H2
    H2 -.-&amp;gt;|&quot;vᵀ J_2&quot;| H1
    H1 -.-&amp;gt;|&quot;vᵀ J_1&quot;| X
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&quot;directional-derivative-and-steepest-descent-1&quot;&gt;Directional derivative and steepest descent&lt;/h3&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t15&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 15 (Steepest descent).&lt;/strong&gt; Let $f$
be differentiable at $x$ with $\nabla f(x) \neq 0$. Then the directional
derivative satisfies&lt;/p&gt;

\[D_u f(x) = \lim_{t \to 0} \frac{f(x + tu) - f(x)}{t} = \langle \nabla f(x), u \rangle ,\]

&lt;p&gt;and over unit vectors $u$ it is maximized uniquely at
$u = \nabla f(x) / \lVert \nabla f(x) \rVert$ and minimized at its negation.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; The equality is the definition of the derivative with $h = tu$,
followed by &lt;a href=&quot;#t11&quot;&gt;T11&lt;/a&gt;. The extremes are the equality case of
Cauchy–Schwarz (&lt;a href=&quot;#t3&quot;&gt;T3&lt;/a&gt;): $\lvert \langle \nabla f, u \rangle \rvert \le \lVert \nabla f \rVert$
for unit $u$, with equality exactly when $u$ is parallel to $\nabla f$. $\square$&lt;/p&gt;

&lt;p&gt;So &lt;strong&gt;the negative gradient is the steepest-descent direction&lt;/strong&gt; is not a
separate fact about optimization; it is &lt;a href=&quot;#t3&quot;&gt;T3&lt;/a&gt; wearing a different hat. Note
what the proof used: &lt;em&gt;the&lt;/em&gt; inner product. Change it and the steepest direction
changes with it — which is precisely the loophole natural gradient and Adam
exploit (row two of &lt;a href=&quot;#t11&quot;&gt;T11&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&quot;gradients-with-respect-to-a-matrix&quot;&gt;Gradients with respect to a matrix&lt;/h3&gt;

&lt;p&gt;Parameters are usually matrices, so we need $\nabla_W f$ for
$f : \mathbb{R}^{m \times n} \to \mathbb{R}$. &lt;strong&gt;Nothing new is required&lt;/strong&gt; —
that is the point of having stated the theorems in general form:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;$\mathbb{R}^{m \times n}$ with $\langle \cdot, \cdot \rangle_F$ is a
finite-dimensional inner-product space, so &lt;a href=&quot;#t11&quot;&gt;T11&lt;/a&gt; already applies and
already tells us the gradient is a matrix of the same shape as $W$:&lt;/li&gt;
&lt;/ol&gt;

\[f(W + H) = f(W) + \langle \nabla_W f, H \rangle_F + o(\lVert H \rVert_F) ;\]

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#t6&quot;&gt;T6&lt;/a&gt;, row two, is the algebra that moves the perturbation into the
right slot;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#t12&quot;&gt;T12&lt;/a&gt; reads the answer off.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is the case we need in the closing section. Let
$S \in \mathbb{R}^{d_v \times d_k}$, $k \in \mathbb{R}^{d_k}$,
$v \in \mathbb{R}^{d_v}$, and&lt;/p&gt;

\[L(S) = \frac{1}{2} \lVert v - S k \rVert^2 .\]

&lt;p&gt;Write $r = v - Sk$ for the residual. Perturbing $S \to S + H$ perturbs the
prediction by $Hk$, hence the residual by $-Hk$:&lt;/p&gt;

\[\begin{aligned}
L(S + H) &amp;amp;= \tfrac{1}{2} \lVert r - Hk \rVert^2 \\
&amp;amp;= \tfrac{1}{2} \lVert r \rVert^2 - \langle r, Hk \rangle + \tfrac{1}{2} \lVert Hk \rVert^2 \\
&amp;amp;= L(S) + \big\langle -r k^\top, \, H \big\rangle_F + o(\lVert H \rVert_F) ,
\end{aligned}\]

&lt;p&gt;where the third line is &lt;a href=&quot;#t6&quot;&gt;T6&lt;/a&gt;, row two:
$\langle r, Hk \rangle = \langle r k^\top, H \rangle_F$. The expansion is now in
the shape &lt;a href=&quot;#t12&quot;&gt;T12&lt;/a&gt; wants, so&lt;/p&gt;

\[\nabla_S L = -(v - Sk) \, k^\top \in \mathbb{R}^{d_v \times d_k} .\]

&lt;p&gt;Shape check: $(d_v \times 1)$ times $(1 \times d_k)$ — correct, as &lt;a href=&quot;#t11&quot;&gt;T11&lt;/a&gt;
promised, and &lt;strong&gt;rank one&lt;/strong&gt; no matter how big $S$ is. That single observation is
what makes the learning rule at the end of this post cost one outer product
instead of a matrix multiply.&lt;/p&gt;

&lt;h3 id=&quot;second-order-hessian-and-taylor&quot;&gt;Second order: Hessian and Taylor&lt;/h3&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t16&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 16 (Hessian symmetry, second-order Taylor).&lt;/strong&gt;
For $f \in C^2$ near $x$, the Hessian&lt;/p&gt;

\[\nabla^2 f(x) = \left[ \frac{\partial^2 f}{\partial x_i \partial x_j} \right] \in \mathbb{R}^{n \times n}\]

&lt;p&gt;is &lt;strong&gt;symmetric&lt;/strong&gt;, and&lt;/p&gt;

\[f(x + h) = f(x) + \langle \nabla f(x), h \rangle + \tfrac{1}{2} h^\top \nabla^2 f(x)\, h + o(\lVert h \rVert^2).\]

&lt;p&gt;&lt;em&gt;Proof sketch.&lt;/em&gt; Symmetry is Schwarz’s theorem: continuous mixed partials
commute. The expansion is one-dimensional Taylor applied to
$t \mapsto f(x + th)$ together with &lt;a href=&quot;#t13&quot;&gt;T13&lt;/a&gt;. $\square$&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;#t16&quot;&gt;T16&lt;/a&gt; is the model behind everything second-order: Newton’s step
$-(\nabla^2 f)^{-1}\nabla f$, curvature read as conditioning
($\kappa = \lambda_{\max}/\lambda_{\min}$ controls gradient-descent speed), and
the classification of critical points by the sign pattern of the eigenvalues
(&lt;a href=&quot;#t19&quot;&gt;T19&lt;/a&gt;): positive definite is a local min, indefinite is a saddle — and
in high dimension, saddles are the norm.&lt;/p&gt;

&lt;h3 id=&quot;identities-worth-memorizing&quot;&gt;Identities worth memorizing&lt;/h3&gt;

&lt;p&gt;With $a, b$ constant vectors, $A$ a constant matrix:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Function&lt;/th&gt;
      &lt;th&gt;Derivative&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;$f(x) = a^\top x$&lt;/td&gt;
      &lt;td&gt;$\nabla f = a$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$f(x) = Ax$&lt;/td&gt;
      &lt;td&gt;$J = A$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$f(x) = x^\top A x$&lt;/td&gt;
      &lt;td&gt;$\nabla f = (A + A^\top)x$, $= 2Ax$ if symmetric&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$f(x) = \tfrac{1}{2}\lVert x \rVert_2^2$&lt;/td&gt;
      &lt;td&gt;$\nabla f = x$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$f(x) = \tfrac{1}{2}\lVert Ax - b \rVert_2^2$&lt;/td&gt;
      &lt;td&gt;$\nabla f = A^\top (Ax - b)$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$f(W) = \lVert XW - Y \rVert_F^2$&lt;/td&gt;
      &lt;td&gt;$\nabla_W f = 2 X^\top (XW - Y)$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$f(X) = \mathrm{tr}(AX)$&lt;/td&gt;
      &lt;td&gt;$\nabla_X f = A^\top$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$f(X) = \log \det X$&lt;/td&gt;
      &lt;td&gt;$\nabla_X f = X^{-\top}$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$L(S) = \frac{1}{2} \lVert v - Sk \rVert^2$&lt;/td&gt;
      &lt;td&gt;$\nabla_S L = -(v - Sk) k^\top$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$\sigma(z) = (1 + e^{-z})^{-1}$&lt;/td&gt;
      &lt;td&gt;$\mathrm{d}\sigma/\mathrm{d}z = \sigma(1 - \sigma)$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$p = \mathrm{softmax}(z)$&lt;/td&gt;
      &lt;td&gt;$J = \operatorname{diag}(p) - p p^\top$&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Setting $\nabla f = 0$ in the fifth row gives the normal equations
$A^\top A x = A^\top b$ — least squares falls out of one identity.&lt;/p&gt;

&lt;p&gt;The last row explains why softmax + cross-entropy is implemented as one
fused op: composing that Jacobian with the cross-entropy gradient collapses
to the famously clean $\hat{y} - y$, avoiding both a matrix build and a
cancellation.&lt;/p&gt;

&lt;h3 id=&quot;engineering-note-autodiff-never-builds-the-jacobian&quot;&gt;Engineering note: autodiff never builds the Jacobian&lt;/h3&gt;

&lt;p&gt;Reverse-mode AD does not compute $J$; it computes &lt;strong&gt;vector–Jacobian
products&lt;/strong&gt; $v^\top J$, each at roughly the cost of one forward evaluation.
For $f : \mathbb{R}^n \to \mathbb{R}$ a single VJP with $v = 1$ yields the
whole gradient — cost $O(1)$ passes instead of $O(n)$.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt; &lt;/th&gt;
      &lt;th&gt;Computes&lt;/th&gt;
      &lt;th&gt;Cost for $f:\mathbb{R}^n \to \mathbb{R}^m$&lt;/th&gt;
      &lt;th&gt;Use when&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Forward mode (JVP)&lt;/td&gt;
      &lt;td&gt;$Jv$, one column direction&lt;/td&gt;
      &lt;td&gt;$n$ passes for full $J$&lt;/td&gt;
      &lt;td&gt;$n \ll m$&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Reverse mode (VJP)&lt;/td&gt;
      &lt;td&gt;$v^\top J$, one row direction&lt;/td&gt;
      &lt;td&gt;$m$ passes for full $J$&lt;/td&gt;
      &lt;td&gt;$m \ll n$&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Training is the extreme case $m = 1$, $n \sim 10^9$ — hence reverse mode,
and hence the memory cost of storing activations for the backward pass. The
same trick gives Hessian-vector products
$\nabla^2 f v = \nabla \langle \nabla f, v \rangle$ without ever forming
the $n \times n$ Hessian.&lt;/p&gt;

&lt;h2 id=&quot;objects-you-will-meet-on-every-page&quot;&gt;Objects you will meet on every page&lt;/h2&gt;

&lt;p&gt;Stated, not developed — each deserves its own part later. They are here because
the closing example and Part 2 cite them.&lt;/p&gt;

&lt;h3 id=&quot;eigendecomposition-and-svd&quot;&gt;Eigendecomposition and SVD&lt;/h3&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t17&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 17 (Spectral theorem, real symmetric).&lt;/strong&gt;
If $A = A^\top \in \mathbb{R}^{n \times n}$, then&lt;/p&gt;

\[A = Q \Lambda Q^\top, \qquad Q^\top Q = I, \quad \Lambda = \operatorname{diag}(\lambda_1, \dots, \lambda_n) \text{ real} :\]

&lt;p&gt;the eigenvalues are real and there is an orthonormal basis of eigenvectors.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Proof sketch.&lt;/em&gt; The Rayleigh quotient $x^\top A x$ attains a maximum on the
unit sphere; a maximizer is an eigenvector, $A$ maps its orthogonal complement
into itself, and one inducts on dimension. $\square$&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t18&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 18 (SVD, and Eckart–Young).&lt;/strong&gt;
Every $A \in \mathbb{R}^{m \times n}$ factors as&lt;/p&gt;

\[A = U \Sigma V^\top, \qquad U, V \text{ orthogonal}, \quad \sigma_1 \ge \cdots \ge \sigma_p \ge 0 .\]

&lt;p&gt;Moreover the truncation $A_r = \sum_{i \le r} \sigma_i u_i v_i^\top$ minimizes
$\lVert A - B \rVert$ over all $B$ with $\operatorname{rank}(B) \le r$,
simultaneously for $\lVert \cdot \rVert_F$ and $\lVert \cdot \rVert_2$.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Proof sketch.&lt;/em&gt; Apply &lt;a href=&quot;#t17&quot;&gt;T17&lt;/a&gt; to $A^\top A \succeq 0$: its orthonormal
eigenvectors give $V$, with $\sigma_i = \sqrt{\lambda_i}$ and
$u_i = A v_i / \sigma_i$. Optimality of the truncation is Eckart–Young. $\square$&lt;/p&gt;

&lt;p&gt;So every linear map is &lt;em&gt;rotate, scale coordinatewise, rotate&lt;/em&gt;. &lt;a href=&quot;#t18&quot;&gt;T18&lt;/a&gt; is
the mathematical core of PCA, of low-rank compression (the $r$ in LoRA,
&lt;a href=&quot;#t2&quot;&gt;T2&lt;/a&gt;), and of the operator norm (&lt;a href=&quot;#t8&quot;&gt;T8&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&quot;positive-semidefiniteness&quot;&gt;Positive semidefiniteness&lt;/h3&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t19&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 19 (PSD equivalences).&lt;/strong&gt; For
symmetric $A$ the following are equivalent: (1) $x^\top A x \ge 0$ for all $x$;
(2) every eigenvalue is $\ge 0$; (3) $A = B^\top B$ for some $B$.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; (1) $\Leftrightarrow$ (2): in eigen-coordinates (&lt;a href=&quot;#t17&quot;&gt;T17&lt;/a&gt;)
$x^\top A x = \sum_i \lambda_i c_i^2$. (2) $\Rightarrow$ (3): take
$B = \Lambda^{1/2} Q^\top$. (3) $\Rightarrow$ (1):
$x^\top B^\top B x = \lVert Bx \rVert^2 \ge 0$. $\square$&lt;/p&gt;

&lt;p&gt;PSD matrices are exactly the ones that can act as a covariance, as a kernel
(Gram) matrix, or as the Hessian of a convex function — by &lt;a href=&quot;#t19&quot;&gt;T19&lt;/a&gt; that is
one condition wearing three hats.&lt;/p&gt;

&lt;h3 id=&quot;convexity-and-smoothness&quot;&gt;Convexity and smoothness&lt;/h3&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t20&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 20 (First-order characterization of convexity).&lt;/strong&gt;
Let $f$ be differentiable on a convex domain. Then $f$ is convex if and only if&lt;/p&gt;

\[f(y) \ge f(x) + \langle \nabla f(x), y - x \rangle \qquad \forall x, y ,\]

&lt;p&gt;i.e. every tangent plane underestimates $f$; and for $f \in C^2$, if and only
if $\nabla^2 f(x) \succeq 0$ everywhere.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Proof sketch.&lt;/em&gt; Restrict to the segment joining $x$ and $y$ to reduce to one
dimension; the second-order form combines &lt;a href=&quot;#t16&quot;&gt;T16&lt;/a&gt; with &lt;a href=&quot;#t19&quot;&gt;T19&lt;/a&gt;. $\square$&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;thm-anchor&quot; id=&quot;t21&quot;&gt;&lt;/a&gt;&lt;strong&gt;Theorem 21 (Descent lemma).&lt;/strong&gt; If
$\nabla f$ is $L$-Lipschitz ($f$ is &lt;strong&gt;$L$-smooth&lt;/strong&gt;), then&lt;/p&gt;

\[f(y) \le f(x) + \langle \nabla f(x), y - x \rangle + \frac{L}{2} \lVert y - x \rVert^2 ,\]

&lt;p&gt;and therefore the step $y = x - \frac{1}{L} \nabla f(x)$ satisfies&lt;/p&gt;

\[f(y) \le f(x) - \frac{1}{2L} \lVert \nabla f(x) \rVert^2 .\]

&lt;p&gt;&lt;em&gt;Proof sketch.&lt;/em&gt; Integrate $\nabla f$ along the segment and bound the
integrand’s deviation using the Lipschitz property; then substitute the
step. $\square$&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;#t21&quot;&gt;T21&lt;/a&gt; is where step sizes come from: $1/L$ is guaranteed to make
progress, and beyond $2/L$ the guarantee reverses — a bound we will see
realized &lt;em&gt;exactly&lt;/em&gt; in the &lt;a href=&quot;#why-a-step-size-of-one-is-the-natural-scale&quot;&gt;closing example&lt;/a&gt;.
Neural losses are neither convex nor globally smooth, which is why the theory
sets expectations rather than guarantees, and why gradient clipping exists.&lt;/p&gt;

&lt;h3 id=&quot;random-vectors&quot;&gt;Random vectors&lt;/h3&gt;

\[\mu = \mathbb{E}[x] \in \mathbb{R}^d, \qquad
\Sigma = \mathbb{E}\big[(x - \mu)(x - \mu)^\top\big] \succeq 0 ,\]

&lt;p&gt;with the two identities that do most of the work:&lt;/p&gt;

\[\mathbb{E}[Ax + b] = A\mu + b, \qquad
\operatorname{Cov}(Ax + b) = A \Sigma A^\top .\]

&lt;p&gt;Training minimizes the empirical risk
$\hat{\mathcal{R}}(\theta) = \frac{1}{N}\sum_{i=1}^{N} \ell(f_\theta(x_i), y_i)$
as a stand-in for $\mathcal{R}(\theta) = \mathbb E_{(x,y)} \lbrack \ell(f_\theta(x), y) \rbrack$;
a minibatch gradient is an unbiased estimator of $\nabla \hat{\mathcal{R}}$
with variance $\propto 1/B$. The whole of SGD lives in that sentence.&lt;/p&gt;

&lt;h3 id=&quot;numerical-hygiene&quot;&gt;Numerical hygiene&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Never invert.&lt;/strong&gt; Solve $Ax = b$ with a factorization (Cholesky for
$A \succ 0$, QR for least squares). Forming $A^{-1}$ is slower and
less accurate, and $A^\top A$ squares the condition number
$\kappa(A) = \sigma_{\max}/\sigma_{\min}$.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Log-sum-exp.&lt;/strong&gt; Compute
$\log \sum_i e^{z_i} = z_{\max} + \log \sum_i e^{z_i - z_{\max}}$;
the naive version overflows for $z_i \gtrsim 88$ in float32.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Know your epsilon.&lt;/strong&gt; float32 has $\approx 7$ decimal digits; adding
$10^{-8}$ to a quantity of order $1$ is a no-op, which is why optimizer
$\varepsilon$ values sit where they do.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;worked-example-the-delta-rule-behind-gated-deltanet&quot;&gt;Worked example: the delta rule behind Gated DeltaNet&lt;/h2&gt;

&lt;p&gt;Time to spend the vocabulary — and to check the claim made at the top, that
nothing gets invoked here that was not proved above. The claim to derive is
that the squared-error objective&lt;/p&gt;

\[L_t(S) = \frac{1}{2} \lVert v_t - S k_t \rVert^2\]

&lt;p&gt;leads to the state update&lt;/p&gt;

\[S_t = S_{t-1} + \beta_t (v_t - S_{t-1} k_t) k_t^\top ,\]

&lt;p&gt;which is the recurrence at the heart of DeltaNet and, with one extra scalar,
of Gated DeltaNet (GDN).&lt;/p&gt;

&lt;h3 id=&quot;the-setup-a-matrix-as-memory&quot;&gt;The setup: a matrix as memory&lt;/h3&gt;

&lt;p&gt;Let the state be a matrix $S \in \mathbb{R}^{d_v \times d_k}$ that answers a
key with a value,&lt;/p&gt;

\[\hat{v} = S k ,\]

&lt;p&gt;i.e. a &lt;strong&gt;linear associative memory&lt;/strong&gt;. This is the row view of the
matrix–vector product (&lt;a href=&quot;#t1&quot;&gt;T1&lt;/a&gt;): row $i$ of $S$ is a template, and
$\hat v_i = \langle \tilde s_i, k \rangle$ scores the key against it. The
whole model is one linear map, and the &lt;em&gt;learning&lt;/em&gt; problem is to keep updating
that map online as new pairs $(k_t, v_t)$ arrive — without storing the past,
unlike attention, which keeps every key and value.&lt;/p&gt;

&lt;p&gt;“Store the pair $(k_t, v_t)$” then means “make $S k_t$ close to $v_t$”, and
the least-squares way to say that is precisely $L_t$ above. Note it is a
function of a &lt;em&gt;matrix&lt;/em&gt;, so the space we are optimizing over is
$\mathbb{R}^{d_v \times d_k}$ with the Frobenius inner product — which is
exactly the setting &lt;a href=&quot;#t11&quot;&gt;T11&lt;/a&gt; was stated in.&lt;/p&gt;

&lt;h3 id=&quot;one-gradient-step-is-the-update&quot;&gt;One gradient step is the update&lt;/h3&gt;

&lt;p&gt;The gradient was computed above by &lt;a href=&quot;#t6&quot;&gt;T6&lt;/a&gt; and &lt;a href=&quot;#t12&quot;&gt;T12&lt;/a&gt;, and it is rank
one:&lt;/p&gt;

\[\nabla_S L_t(S) = -(v_t - S k_t) k_t^\top .\]

&lt;p&gt;Now take a single step of gradient descent, starting from the state we
already have and using step size $\beta_t$:&lt;/p&gt;

\[\begin{aligned}
S_t &amp;amp;= S_{t-1} - \beta_t \nabla_S L_t(S_{t-1}) \\
&amp;amp;= S_{t-1} + \beta_t (v_t - S_{t-1} k_t) k_t^\top .
\end{aligned}\]

&lt;p&gt;That is the whole derivation — and every symbol now has a provenance:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;$r_t = v_t - S_{t-1} k_t$ is the &lt;strong&gt;prediction error&lt;/strong&gt;: what the memory
currently answers versus what it should. This is the “delta”, and the rule
is Widrow–Hoff’s delta rule from 1960 wearing modern notation.&lt;/li&gt;
  &lt;li&gt;the trailing $k_t^\top$ is &lt;strong&gt;not decoration&lt;/strong&gt;: by &lt;a href=&quot;#t6&quot;&gt;T6&lt;/a&gt;, row two, it is
the adjoint of $H \mapsto H k_t$, the unique linear map that carries an error
in $\mathbb{R}^{d_v}$ back to a correction in
$\mathbb{R}^{d_v \times d_k}$ — routed only to the coordinates that produced
the error.&lt;/li&gt;
  &lt;li&gt;subtracting a gradient from a state is type-correct only because
&lt;a href=&quot;#t11&quot;&gt;T11&lt;/a&gt; put $\nabla_S L_t$ in the same space as $S$, with the same shape.&lt;/li&gt;
  &lt;li&gt;$\beta_t$ is a &lt;strong&gt;learning rate&lt;/strong&gt;, so we should be able to say what value is
right. We can, exactly — that is &lt;a href=&quot;#t20&quot;&gt;T20&lt;/a&gt; and &lt;a href=&quot;#t21&quot;&gt;T21&lt;/a&gt; below.&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;flowchart LR
    K[key k_t] --&amp;gt; R[&quot;read: S_t-1 k_t&quot;]
    S0[state S_t-1] --&amp;gt; R
    R --&amp;gt; E[&quot;error r_t = v_t - S_t-1 k_t&quot;]
    V[value v_t] --&amp;gt; E
    E --&amp;gt; U[&quot;write: + beta_t r_t k_tᵀ&quot;]
    S0 --&amp;gt; U
    U --&amp;gt; S1[state S_t]
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&quot;why-a-step-size-of-one-is-the-natural-scale&quot;&gt;Why a step size of one is the natural scale&lt;/h3&gt;

&lt;p&gt;$L_t$ is a convex quadratic in $S$ — convex because its Hessian is PSD
(&lt;a href=&quot;#t19&quot;&gt;T19&lt;/a&gt;, &lt;a href=&quot;#t20&quot;&gt;T20&lt;/a&gt;) — so we need not guess the step size. Apply the new
state to the very key we just wrote, using that
$k_t^\top k_t = \lVert k_t \rVert^2$ is a scalar:&lt;/p&gt;

\[\begin{aligned}
v_t - S_t k_t &amp;amp;= v_t - S_{t-1} k_t - \beta_t (v_t - S_{t-1} k_t) k_t^\top k_t \\
&amp;amp;= \big(1 - \beta_t \lVert k_t \rVert^2\big) (v_t - S_{t-1} k_t) .
\end{aligned}\]

&lt;p&gt;One step therefore multiplies the error on $k_t$ by
$1 - \beta_t \lVert k_t \rVert^2$, and the consequences read off immediately:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Step size&lt;/th&gt;
      &lt;th&gt;Effect on the error&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;$\beta_t = 1/\lVert k_t \rVert^2$&lt;/td&gt;
      &lt;td&gt;error becomes exactly $0$, so $S_t k_t = v_t$ — a perfect write&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$\beta_t \in (0, 1/\lVert k_t \rVert^2)$&lt;/td&gt;
      &lt;td&gt;error shrinks but survives — a partial write&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$\beta_t = 2/\lVert k_t \rVert^2$&lt;/td&gt;
      &lt;td&gt;error keeps its magnitude, flips sign — no progress&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$\beta_t &amp;gt; 2/\lVert k_t \rVert^2$&lt;/td&gt;
      &lt;td&gt;error grows — divergence&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;With normalized keys, $\lVert k_t \rVert = 1$, the perfect write is simply
$\beta_t = 1$, and $\beta_t \in (0, 1)$ interpolates: it is exactly &lt;em&gt;how much
of the old association to overwrite&lt;/em&gt;. That is why implementations put a
sigmoid on $\beta_t$ and normalize $k_t$ — the parameterization then cannot
leave the stable region.&lt;/p&gt;

&lt;p&gt;This is not a coincidence, it is &lt;a href=&quot;#t21&quot;&gt;T21&lt;/a&gt; coming out exact. In
$\mathrm{vec}$ coordinates, $S k = (k^\top \otimes I) \mathrm{vec}(S)$, so&lt;/p&gt;

\[L_t(S) = \tfrac{1}{2} \big\lVert v_t - (k_t^\top \otimes I) \mathrm{vec}(S) \big\rVert^2,
\qquad
\nabla^2 = (k_t k_t^\top) \otimes I ,\]

&lt;p&gt;whose only nonzero eigenvalue is $\lVert k_t \rVert^2$ (&lt;a href=&quot;#t17&quot;&gt;T17&lt;/a&gt;). So $L_t$
is $L$-smooth with $L = \lVert k_t \rVert^2$, and the two thresholds
&lt;a href=&quot;#t21&quot;&gt;T21&lt;/a&gt; predicts — guaranteed progress at $1/L$, guarantee lost past $2/L$ —
are exactly the perfect-write and divergence rows of the table above. For a
quadratic the descent lemma is tight, which is why “$1/L$” is not merely safe
here but optimal.&lt;/p&gt;

&lt;h3 id=&quot;the-same-update-as-erase-then-write&quot;&gt;The same update, as erase-then-write&lt;/h3&gt;

&lt;p&gt;Regroup the update without assuming anything:&lt;/p&gt;

\[S_t = S_{t-1} \big( I - \beta_t k_t k_t^\top \big) + \beta_t v_t k_t^\top .\]

&lt;p&gt;(Expand it: the cross term is $-\beta_t S_{t-1} k_t k_t^\top$, which is what
the previous form has.) Read this version operationally. When
$\beta_t \lVert k_t \rVert^2 = 1$, the factor $I - \beta_t k_t k_t^\top$ is
precisely the orthogonal projector of &lt;a href=&quot;#t7&quot;&gt;T7&lt;/a&gt; onto the complement of $k_t$:
it annihilates the $k_t$ direction and leaves everything perpendicular to it
untouched. So the step is literally:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;erase&lt;/strong&gt; whatever the memory currently associates with $k_t$,&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;write&lt;/strong&gt; $v_t$ in the freed slot.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Because the correction is rank one, no other direction in $S$ is disturbed —
that is what makes this a memory with targeted editing, rather than a
decaying running average like a plain linear-attention state
($S_t = S_{t-1} + v_t k_t^\top$, which only ever accumulates).&lt;/p&gt;

&lt;h3 id=&quot;the-gate-from-deltanet-to-gdn&quot;&gt;The gate: from DeltaNet to GDN&lt;/h3&gt;

&lt;p&gt;The delta rule as derived never forgets: information leaves $S$ only when
something is written on the same key. Gated DeltaNet adds a data-dependent
scalar decay $\alpha_t \in (0, 1)$ on the retained state:&lt;/p&gt;

\[S_t = \alpha_t S_{t-1} \big( I - \beta_t k_t k_t^\top \big) + \beta_t v_t k_t^\top .\]

&lt;p&gt;The division of labour is clean, and it is why both gates exist:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;$\beta_t$ — &lt;strong&gt;write precision&lt;/strong&gt;: how completely this key is overwritten
(from the least-squares step-size analysis above);&lt;/li&gt;
  &lt;li&gt;$\alpha_t$ — &lt;strong&gt;retention&lt;/strong&gt;: a global multiplicative forget, which is what
Mamba-style state-space models use and what the pure delta rule lacks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are emitted by the network from the current token, which is all
“gated” means: the optimizer-like recurrence gets its step size and its decay
from the data rather than from a hyperparameter.&lt;/p&gt;

&lt;h3 id=&quot;what-it-costs&quot;&gt;What it costs&lt;/h3&gt;

&lt;p&gt;Per step: one matvec $S_{t-1} k_t$, one outer product, one scaled add —
$O(d_k d_v)$ time and $O(d_k d_v)$ memory, with &lt;strong&gt;no dependence on sequence
length&lt;/strong&gt;. Nothing here ever forms a Jacobian, a Hessian or an inverse: the
gradient was available in closed form as a rank-one outer product, which is the
practical dividend of &lt;a href=&quot;#t6&quot;&gt;T6&lt;/a&gt; and &lt;a href=&quot;#t12&quot;&gt;T12&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;delta_step&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;beta&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;alpha&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;&quot;&quot;&quot;One GDN state update. alpha=1 recovers the plain delta rule.&quot;&quot;&quot;&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# S: (dv, dk) state    k: (dk,) key    v: (dv,) value
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;alpha&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;S&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;@&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;              &lt;span class=&quot;c1&quot;&gt;# error against the retained state
&lt;/span&gt;    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;alpha&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;S&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;beta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;outer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;# perfect write: with alpha=1 and beta = 1/||k||^2, the key reads back exactly
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;S1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;delta_step&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;S&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;beta&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;k&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;@&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;assert&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;allclose&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;S1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;@&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;k&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The sequential form above is latency-bound on a GPU — $T$ dependent steps of
tiny work. Production kernels therefore process a chunk of steps at once by
unrolling the recurrence into matrix products (the WY-style representation),
which is &lt;a href=&quot;#t1&quot;&gt;T1&lt;/a&gt;’s associativity reappearing as a throughput trick: same
arithmetic, different parenthesization, orders of magnitude of difference.&lt;/p&gt;

&lt;h3 id=&quot;what-was-actually-used&quot;&gt;What was actually used&lt;/h3&gt;

&lt;p&gt;The whole example rests on eight of the numbered results, which is the point:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Step&lt;/th&gt;
      &lt;th&gt;Result used&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;$S$ as an associative memory, row view&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;#t1&quot;&gt;T1&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;the gradient lives in matrix space, same shape as $S$&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;#t11&quot;&gt;T11&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$\langle r, Hk \rangle = \langle r k^\top, H \rangle_F$&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;#t6&quot;&gt;T6&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;reading $\nabla_S L$ off the expansion&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;#t12&quot;&gt;T12&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$L_t$ convex, Hessian PSD&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;#t19&quot;&gt;T19&lt;/a&gt;, &lt;a href=&quot;#t20&quot;&gt;T20&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;the eigenvalue $\lVert k_t \rVert^2$&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;#t17&quot;&gt;T17&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;step sizes $1/L$ and $2/L$&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;#t21&quot;&gt;T21&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;$I - k k^\top / \lVert k \rVert^2$ erases the key&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;#t7&quot;&gt;T7&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;next&quot;&gt;Next&lt;/h2&gt;

&lt;p&gt;Part 2 will build on this: linear systems and least squares, then
eigen/SVD in full, and the optimization view of training — including what
changes when the one-step rule above is replaced by many steps on many pairs
at once.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>2024-1-28-Switzerland</title>
      <link>https://zty2004.github.io/Switzerland/</link>
      <guid isPermaLink="true">https://zty2004.github.io/Switzerland/</guid>
      <pubDate>Sun, 28 Jan 2024 00:00:00 +0000</pubDate>
      <category>travel</category>
      <category>switzerland</category><description>&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_112007.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_112007.jpg&quot; alt=&quot;pic1&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_123816.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_123816.jpg&quot; alt=&quot;pic2&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_124225.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_124225.jpg&quot; alt=&quot;pic3&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_124726.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_124726.jpg&quot; alt=&quot;pic4&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_124755.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_124755.jpg&quot; alt=&quot;pic5&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_124901.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_124901.jpg&quot; alt=&quot;pic6&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_125127.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_125127.jpg&quot; alt=&quot;pic7&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_125335.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_125335.jpg&quot; alt=&quot;pic8&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_125406.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_125406.jpg&quot; alt=&quot;pic9&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_125827.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_125827.jpg&quot; alt=&quot;pic10&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_125919.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_125919.jpg&quot; alt=&quot;pic11&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_130109.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_130109.jpg&quot; alt=&quot;pic12&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_130446.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_130446.jpg&quot; alt=&quot;pic13&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_131348.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_131348.jpg&quot; alt=&quot;pic14&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_131353.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_131353.jpg&quot; alt=&quot;pic15&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_131404.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_131404.jpg&quot; alt=&quot;pic16&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_131643.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_131643.jpg&quot; alt=&quot;pic17&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_131707.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_131707.jpg&quot; alt=&quot;pic18&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_132158.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_132158.jpg&quot; alt=&quot;pic19&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_140821.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_140821.jpg&quot; alt=&quot;pic20&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_140837.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_140837.jpg&quot; alt=&quot;pic21&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_140842.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_140842.jpg&quot; alt=&quot;pic22&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_141131.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_141131.jpg&quot; alt=&quot;pic23&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_144243.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_144243.jpg&quot; alt=&quot;pic24&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_144308.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_144308.jpg&quot; alt=&quot;pic25&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_144341.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_144341.jpg&quot; alt=&quot;pic26&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_144400.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_144400.jpg&quot; alt=&quot;pic27&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_144533.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_144533.jpg&quot; alt=&quot;pic28&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_144721.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_144721.jpg&quot; alt=&quot;pic29&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_145216.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_145216.jpg&quot; alt=&quot;pic30&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_145808.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_145808.jpg&quot; alt=&quot;pic31&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_150236.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_150236.jpg&quot; alt=&quot;pic32&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_150447.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_150447.jpg&quot; alt=&quot;pic33&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_150818.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_150818.jpg&quot; alt=&quot;pic34&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_150822.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_150822.jpg&quot; alt=&quot;pic35&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_151541.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_151541.jpg&quot; alt=&quot;pic36&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_154614.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_154614.jpg&quot; alt=&quot;pic37&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_154906.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_154906.jpg&quot; alt=&quot;pic38&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_160010.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_160010.jpg&quot; alt=&quot;pic39&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_163959.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_163959.jpg&quot; alt=&quot;pic40&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_164015.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_164015.jpg&quot; alt=&quot;pic41&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_164127.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_164127.jpg&quot; alt=&quot;pic42&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_164134.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_164134.jpg&quot; alt=&quot;pic43&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_164258.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_164258.jpg&quot; alt=&quot;pic44&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_164308.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_164308.jpg&quot; alt=&quot;pic45&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_164320.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_164320.jpg&quot; alt=&quot;pic46&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_164601.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_164601.jpg&quot; alt=&quot;pic47&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_165741.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_165741.jpg&quot; alt=&quot;pic48&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_172107.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_172107.jpg&quot; alt=&quot;pic49&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_172417.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_172417.jpg&quot; alt=&quot;pic50&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_173912.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_173912.jpg&quot; alt=&quot;pic51&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_174826.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_174826.jpg&quot; alt=&quot;pic52&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_084427.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_084427.jpg&quot; alt=&quot;pic53&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_101054.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_101054.jpg&quot; alt=&quot;pic54&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_125459.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_125459.jpg&quot; alt=&quot;pic55&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_144303.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_144303.jpg&quot; alt=&quot;pic56&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_163040.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240127_163040.jpg&quot; alt=&quot;pic57&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_101110.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_101110.jpg&quot; alt=&quot;pic58&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_101517.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_101517.jpg&quot; alt=&quot;pic59&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_101623.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_101623.jpg&quot; alt=&quot;pic60&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_101912.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_101912.jpg&quot; alt=&quot;pic61&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_101943.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_101943.jpg&quot; alt=&quot;pic62&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_102858.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_102858.jpg&quot; alt=&quot;pic63&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_102919.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_102919.jpg&quot; alt=&quot;pic64&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_103030.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_103030.jpg&quot; alt=&quot;pic65&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_104325.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_104325.jpg&quot; alt=&quot;pic66&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_104509.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_104509.jpg&quot; alt=&quot;pic67&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_104514.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_104514.jpg&quot; alt=&quot;pic68&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_105420.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_105420.jpg&quot; alt=&quot;pic69&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_105435.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_105435.jpg&quot; alt=&quot;pic70&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_105744.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_105744.jpg&quot; alt=&quot;pic71&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_111852.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_111852.jpg&quot; alt=&quot;pic72&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_121906.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_121906.jpg&quot; alt=&quot;pic73&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_122201.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_122201.jpg&quot; alt=&quot;pic74&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_124122.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_124122.jpg&quot; alt=&quot;pic75&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_134903.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_134903.jpg&quot; alt=&quot;pic76&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_151055.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_151055.jpg&quot; alt=&quot;pic77&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_151136.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_151136.jpg&quot; alt=&quot;pic78&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_151344.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Switzerland/IMG_20240128_151344.jpg&quot; alt=&quot;pic79&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

</description>
    </item>
    <item>
      <title>2024-1-28-Germany</title>
      <link>https://zty2004.github.io/Germany/</link>
      <guid isPermaLink="true">https://zty2004.github.io/Germany/</guid>
      <pubDate>Sun, 28 Jan 2024 00:00:00 +0000</pubDate>
      <category>travel</category>
      <category>germany</category><description>&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_075901.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_075901.jpg&quot; alt=&quot;pic1&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_112748.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_112748.jpg&quot; alt=&quot;pic2&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_121757.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_121757.jpg&quot; alt=&quot;pic3&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_134258.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_134258.jpg&quot; alt=&quot;pic4&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_134943.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_134943.jpg&quot; alt=&quot;pic5&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_135106.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_135106.jpg&quot; alt=&quot;pic6&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_135258.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_135258.jpg&quot; alt=&quot;pic7&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_140935.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_140935.jpg&quot; alt=&quot;pic8&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_142731.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_142731.jpg&quot; alt=&quot;pic9&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_143038.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_143038.jpg&quot; alt=&quot;pic10&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_143128.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_143128.jpg&quot; alt=&quot;pic11&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_143230.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_143230.jpg&quot; alt=&quot;pic12&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_145323.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_145323.jpg&quot; alt=&quot;pic13&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_145404.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_145404.jpg&quot; alt=&quot;pic14&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_145500.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_145500.jpg&quot; alt=&quot;pic15&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_145824.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_145824.jpg&quot; alt=&quot;pic16&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_145921.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_145921.jpg&quot; alt=&quot;pic17&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_151513.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_151513.jpg&quot; alt=&quot;pic18&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_154419.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_154419.jpg&quot; alt=&quot;pic19&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_154428.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_154428.jpg&quot; alt=&quot;pic20&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_155016.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_155016.jpg&quot; alt=&quot;pic21&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_155319.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_155319.jpg&quot; alt=&quot;pic22&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_155408.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_155408.jpg&quot; alt=&quot;pic23&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_155435.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_155435.jpg&quot; alt=&quot;pic24&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_155615.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_155615.jpg&quot; alt=&quot;pic25&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_145035.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_145035.jpg&quot; alt=&quot;pic26&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_155643.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_155643.jpg&quot; alt=&quot;pic27&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240104_181652.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240104_181652.jpg&quot; alt=&quot;pic28&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_105318.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_105318.jpg&quot; alt=&quot;pic29&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_135057.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_135057.jpg&quot; alt=&quot;pic30&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_145042.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_145042.jpg&quot; alt=&quot;pic31&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_170812.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_170812.jpg&quot; alt=&quot;pic32&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_130935.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_130935.jpg&quot; alt=&quot;pic33&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_134153.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_134153.jpg&quot; alt=&quot;pic34&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_124319.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_124319.jpg&quot; alt=&quot;pic35&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_152210.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_152210.jpg&quot; alt=&quot;pic36&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_160423.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_160423.jpg&quot; alt=&quot;pic37&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_112748.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_112748.jpg&quot; alt=&quot;pic38&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_121134.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_121134.jpg&quot; alt=&quot;pic39&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_185642.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_185642.jpg&quot; alt=&quot;pic40&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_192210.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_192210.jpg&quot; alt=&quot;pic41&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_200629.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_200629.jpg&quot; alt=&quot;pic42&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202652.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202652.jpg&quot; alt=&quot;pic43&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_155740.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_155740.jpg&quot; alt=&quot;pic44&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_160407.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_160407.jpg&quot; alt=&quot;pic45&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_160450.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_160450.jpg&quot; alt=&quot;pic46&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_160515.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_160515.jpg&quot; alt=&quot;pic47&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_161502.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_161502.jpg&quot; alt=&quot;pic48&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_161612.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_161612.jpg&quot; alt=&quot;pic49&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_162145.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_162145.jpg&quot; alt=&quot;pic50&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_163427.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_163427.jpg&quot; alt=&quot;pic51&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_164509.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_164509.jpg&quot; alt=&quot;pic52&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_175322.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_175322.jpg&quot; alt=&quot;pic53&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_182021.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_182021.jpg&quot; alt=&quot;pic54&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_183733.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240103_183733.jpg&quot; alt=&quot;pic55&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240104_131410.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240104_131410.jpg&quot; alt=&quot;pic56&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240104_131551.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240104_131551.jpg&quot; alt=&quot;pic57&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240104_181115.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240104_181115.jpg&quot; alt=&quot;pic58&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240104_182808.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240104_182808.jpg&quot; alt=&quot;pic59&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_092212.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_092212.jpg&quot; alt=&quot;pic60&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_092641.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_092641.jpg&quot; alt=&quot;pic61&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_094129.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_094129.jpg&quot; alt=&quot;pic62&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_094136.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_094136.jpg&quot; alt=&quot;pic63&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_095418.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_095418.jpg&quot; alt=&quot;pic64&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_100407.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_100407.jpg&quot; alt=&quot;pic65&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_100904.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_100904.jpg&quot; alt=&quot;pic66&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_101315.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_101315.jpg&quot; alt=&quot;pic67&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_101349.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_101349.jpg&quot; alt=&quot;pic68&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_101715.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_101715.jpg&quot; alt=&quot;pic69&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_102203.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_102203.jpg&quot; alt=&quot;pic70&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_102455.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_102455.jpg&quot; alt=&quot;pic71&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_104431.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_104431.jpg&quot; alt=&quot;pic72&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_105627.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_105627.jpg&quot; alt=&quot;pic73&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_112502_edit_189883507800712.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_112502_edit_189883507800712.jpg&quot; alt=&quot;pic74&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_114156.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_114156.jpg&quot; alt=&quot;pic75&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_114517.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_114517.jpg&quot; alt=&quot;pic76&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_114545.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_114545.jpg&quot; alt=&quot;pic77&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_114642.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_114642.jpg&quot; alt=&quot;pic78&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_114718.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_114718.jpg&quot; alt=&quot;pic79&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_120226.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_120226.jpg&quot; alt=&quot;pic80&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_121705.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_121705.jpg&quot; alt=&quot;pic81&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_134401.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_134401.jpg&quot; alt=&quot;pic82&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_134408.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_134408.jpg&quot; alt=&quot;pic83&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_134525.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_134525.jpg&quot; alt=&quot;pic84&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_134600.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_134600.jpg&quot; alt=&quot;pic85&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_134914.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_134914.jpg&quot; alt=&quot;pic86&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_135039.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_135039.jpg&quot; alt=&quot;pic87&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_135233.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_135233.jpg&quot; alt=&quot;pic88&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_135409.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_135409.jpg&quot; alt=&quot;pic89&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_135913.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_135913.jpg&quot; alt=&quot;pic90&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_135923.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_135923.jpg&quot; alt=&quot;pic91&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_143330.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_143330.jpg&quot; alt=&quot;pic92&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_143334.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_143334.jpg&quot; alt=&quot;pic93&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_143437.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_143437.jpg&quot; alt=&quot;pic94&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_144343.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_144343.jpg&quot; alt=&quot;pic95&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_144824.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_144824.jpg&quot; alt=&quot;pic96&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_145001.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_145001.jpg&quot; alt=&quot;pic97&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_145016.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_145016.jpg&quot; alt=&quot;pic98&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_145025.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_145025.jpg&quot; alt=&quot;pic99&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_145114.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_145114.jpg&quot; alt=&quot;pic100&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_150231.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_150231.jpg&quot; alt=&quot;pic101&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_151104.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_151104.jpg&quot; alt=&quot;pic102&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_151115.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_151115.jpg&quot; alt=&quot;pic103&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_151322.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_151322.jpg&quot; alt=&quot;pic104&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_151900.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_151900.jpg&quot; alt=&quot;pic105&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_152401.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240105_152401.jpg&quot; alt=&quot;pic106&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_163146.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_163146.jpg&quot; alt=&quot;pic107&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_163216.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_163216.jpg&quot; alt=&quot;pic108&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_163448.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_163448.jpg&quot; alt=&quot;pic109&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_163457.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_163457.jpg&quot; alt=&quot;pic110&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_163600.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_163600.jpg&quot; alt=&quot;pic111&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_163615.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_163615.jpg&quot; alt=&quot;pic112&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_163718.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_163718.jpg&quot; alt=&quot;pic113&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_170123.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_170123.jpg&quot; alt=&quot;pic114&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_173801.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240108_173801.jpg&quot; alt=&quot;pic115&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_121459.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_121459.jpg&quot; alt=&quot;pic116&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_121728.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_121728.jpg&quot; alt=&quot;pic117&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_121756.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_121756.jpg&quot; alt=&quot;pic118&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_122339.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_122339.jpg&quot; alt=&quot;pic119&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_122525.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_122525.jpg&quot; alt=&quot;pic120&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_123203.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_123203.jpg&quot; alt=&quot;pic121&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_123255.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_123255.jpg&quot; alt=&quot;pic122&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_125809.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_125809.jpg&quot; alt=&quot;pic123&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_125934.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_125934.jpg&quot; alt=&quot;pic124&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_125956.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_125956.jpg&quot; alt=&quot;pic125&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_130019.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_130019.jpg&quot; alt=&quot;pic126&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_130106.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_130106.jpg&quot; alt=&quot;pic127&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_130205.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_130205.jpg&quot; alt=&quot;pic128&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_130255.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_130255.jpg&quot; alt=&quot;pic129&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_131009.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_131009.jpg&quot; alt=&quot;pic130&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_131235.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_131235.jpg&quot; alt=&quot;pic131&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_131411.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_131411.jpg&quot; alt=&quot;pic132&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_131426.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_131426.jpg&quot; alt=&quot;pic133&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_132025.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_132025.jpg&quot; alt=&quot;pic134&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_132126.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_132126.jpg&quot; alt=&quot;pic135&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_132518.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_132518.jpg&quot; alt=&quot;pic136&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_132818.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_132818.jpg&quot; alt=&quot;pic137&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_132844.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_132844.jpg&quot; alt=&quot;pic138&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_132937.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_132937.jpg&quot; alt=&quot;pic139&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_134211.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_134211.jpg&quot; alt=&quot;pic140&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_134327.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_134327.jpg&quot; alt=&quot;pic141&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_134503.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240109_134503.jpg&quot; alt=&quot;pic142&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240110_145557.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240110_145557.jpg&quot; alt=&quot;pic143&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240110_163228.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240110_163228.jpg&quot; alt=&quot;pic144&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_134425.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_134425.jpg&quot; alt=&quot;pic145&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_134811.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_134811.jpg&quot; alt=&quot;pic146&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_134818.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_134818.jpg&quot; alt=&quot;pic147&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_142143.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_142143.jpg&quot; alt=&quot;pic148&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_142154.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_142154.jpg&quot; alt=&quot;pic149&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_144013.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_144013.jpg&quot; alt=&quot;pic150&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_144938.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_144938.jpg&quot; alt=&quot;pic151&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_150310.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240112_150310.jpg&quot; alt=&quot;pic152&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_104004.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_104004.jpg&quot; alt=&quot;pic153&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_104025.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_104025.jpg&quot; alt=&quot;pic154&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_104542.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_104542.jpg&quot; alt=&quot;pic155&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_105109.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_105109.jpg&quot; alt=&quot;pic156&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_120817.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_120817.jpg&quot; alt=&quot;pic157&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_122847.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_122847.jpg&quot; alt=&quot;pic158&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_122852.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_122852.jpg&quot; alt=&quot;pic159&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_150156.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_150156.jpg&quot; alt=&quot;pic160&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_150822.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_150822.jpg&quot; alt=&quot;pic161&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_150830.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_150830.jpg&quot; alt=&quot;pic162&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_150959.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_150959.jpg&quot; alt=&quot;pic163&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151042.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151042.jpg&quot; alt=&quot;pic164&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151231.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151231.jpg&quot; alt=&quot;pic165&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151305.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151305.jpg&quot; alt=&quot;pic166&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151318.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151318.jpg&quot; alt=&quot;pic167&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151451.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151451.jpg&quot; alt=&quot;pic168&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151518.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151518.jpg&quot; alt=&quot;pic169&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151548.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151548.jpg&quot; alt=&quot;pic170&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151606.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151606.jpg&quot; alt=&quot;pic171&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151650.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151650.jpg&quot; alt=&quot;pic172&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151723.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_151723.jpg&quot; alt=&quot;pic173&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_152206.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_152206.jpg&quot; alt=&quot;pic174&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_152430.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_152430.jpg&quot; alt=&quot;pic175&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_152625.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_152625.jpg&quot; alt=&quot;pic176&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_152718.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_152718.jpg&quot; alt=&quot;pic177&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_153457.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_153457.jpg&quot; alt=&quot;pic178&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_153652.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_153652.jpg&quot; alt=&quot;pic179&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_153942.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_153942.jpg&quot; alt=&quot;pic180&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_154244.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_154244.jpg&quot; alt=&quot;pic181&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_154301.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_154301.jpg&quot; alt=&quot;pic182&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_154520.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_154520.jpg&quot; alt=&quot;pic183&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_154542.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_154542.jpg&quot; alt=&quot;pic184&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_154858.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_154858.jpg&quot; alt=&quot;pic185&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_155120.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_155120.jpg&quot; alt=&quot;pic186&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_155912.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_155912.jpg&quot; alt=&quot;pic187&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_155921.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_155921.jpg&quot; alt=&quot;pic188&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_160230.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_160230.jpg&quot; alt=&quot;pic189&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_163055.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_163055.jpg&quot; alt=&quot;pic190&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_163652.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_163652.jpg&quot; alt=&quot;pic191&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_163713.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_163713.jpg&quot; alt=&quot;pic192&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_164139.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_164139.jpg&quot; alt=&quot;pic193&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_164441.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_164441.jpg&quot; alt=&quot;pic194&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_164538.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_164538.jpg&quot; alt=&quot;pic195&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_164648.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240113_164648.jpg&quot; alt=&quot;pic196&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240115_130309.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240115_130309.jpg&quot; alt=&quot;pic197&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240115_153831.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240115_153831.jpg&quot; alt=&quot;pic198&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240115_153837.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240115_153837.jpg&quot; alt=&quot;pic199&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240115_164326.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240115_164326.jpg&quot; alt=&quot;pic200&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240115_182541.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240115_182541.jpg&quot; alt=&quot;pic201&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240116_084443.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240116_084443.jpg&quot; alt=&quot;pic202&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_111021.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_111021.jpg&quot; alt=&quot;pic203&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_112711.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_112711.jpg&quot; alt=&quot;pic204&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_113614.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_113614.jpg&quot; alt=&quot;pic205&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_130716.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_130716.jpg&quot; alt=&quot;pic206&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_130721.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_130721.jpg&quot; alt=&quot;pic207&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_130808.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_130808.jpg&quot; alt=&quot;pic208&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_152215.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_152215.jpg&quot; alt=&quot;pic209&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_152725.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_152725.jpg&quot; alt=&quot;pic210&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_153529.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_153529.jpg&quot; alt=&quot;pic211&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_154859.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_154859.jpg&quot; alt=&quot;pic212&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_155123.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_155123.jpg&quot; alt=&quot;pic213&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_162023.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_162023.jpg&quot; alt=&quot;pic214&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_162033.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_162033.jpg&quot; alt=&quot;pic215&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_162411.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_162411.jpg&quot; alt=&quot;pic216&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_162445.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_162445.jpg&quot; alt=&quot;pic217&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_162641.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_162641.jpg&quot; alt=&quot;pic218&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_163813.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240117_163813.jpg&quot; alt=&quot;pic219&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_123643.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_123643.jpg&quot; alt=&quot;pic220&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_123833.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_123833.jpg&quot; alt=&quot;pic221&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_123840.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_123840.jpg&quot; alt=&quot;pic222&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_123845.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_123845.jpg&quot; alt=&quot;pic223&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_125352.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_125352.jpg&quot; alt=&quot;pic224&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_125401.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_125401.jpg&quot; alt=&quot;pic225&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_125424.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_125424.jpg&quot; alt=&quot;pic226&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_125527.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_125527.jpg&quot; alt=&quot;pic227&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_130111.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_130111.jpg&quot; alt=&quot;pic228&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_130541.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_130541.jpg&quot; alt=&quot;pic229&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_130852.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_130852.jpg&quot; alt=&quot;pic230&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_133558.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_133558.jpg&quot; alt=&quot;pic231&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_133601.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240119_133601.jpg&quot; alt=&quot;pic232&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_181238.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_181238.jpg&quot; alt=&quot;pic233&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_184144.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_184144.jpg&quot; alt=&quot;pic234&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_185823.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_185823.jpg&quot; alt=&quot;pic235&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_185926.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_185926.jpg&quot; alt=&quot;pic236&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_190054.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_190054.jpg&quot; alt=&quot;pic237&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_190152.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_190152.jpg&quot; alt=&quot;pic238&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_190250.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_190250.jpg&quot; alt=&quot;pic239&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_190445.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_190445.jpg&quot; alt=&quot;pic240&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_190733.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_190733.jpg&quot; alt=&quot;pic241&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_190817.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_190817.jpg&quot; alt=&quot;pic242&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_191005.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_191005.jpg&quot; alt=&quot;pic243&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_191411.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_191411.jpg&quot; alt=&quot;pic244&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_191732.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_191732.jpg&quot; alt=&quot;pic245&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_191741.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_191741.jpg&quot; alt=&quot;pic246&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_191850.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_191850.jpg&quot; alt=&quot;pic247&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_191941.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_191941.jpg&quot; alt=&quot;pic248&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_192223.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_192223.jpg&quot; alt=&quot;pic249&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_192413.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_192413.jpg&quot; alt=&quot;pic250&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_192624.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_192624.jpg&quot; alt=&quot;pic251&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_192635.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_192635.jpg&quot; alt=&quot;pic252&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_193323.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_193323.jpg&quot; alt=&quot;pic253&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_193416.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_193416.jpg&quot; alt=&quot;pic254&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_193633.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_193633.jpg&quot; alt=&quot;pic255&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_193759.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_193759.jpg&quot; alt=&quot;pic256&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_194304.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_194304.jpg&quot; alt=&quot;pic257&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_194738.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_194738.jpg&quot; alt=&quot;pic258&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_195015.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_195015.jpg&quot; alt=&quot;pic259&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_195025.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_195025.jpg&quot; alt=&quot;pic260&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_195111.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_195111.jpg&quot; alt=&quot;pic261&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_195233.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_195233.jpg&quot; alt=&quot;pic262&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_200559.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_200559.jpg&quot; alt=&quot;pic263&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_200650.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_200650.jpg&quot; alt=&quot;pic264&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_201110.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_201110.jpg&quot; alt=&quot;pic265&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_201157.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_201157.jpg&quot; alt=&quot;pic266&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_201521.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_201521.jpg&quot; alt=&quot;pic267&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_201647.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_201647.jpg&quot; alt=&quot;pic268&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_201738.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_201738.jpg&quot; alt=&quot;pic269&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202009.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202009.jpg&quot; alt=&quot;pic270&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202122.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202122.jpg&quot; alt=&quot;pic271&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202207.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202207.jpg&quot; alt=&quot;pic272&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202242.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202242.jpg&quot; alt=&quot;pic273&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202312.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202312.jpg&quot; alt=&quot;pic274&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202402.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202402.jpg&quot; alt=&quot;pic275&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202432.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202432.jpg&quot; alt=&quot;pic276&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202636.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_202636.jpg&quot; alt=&quot;pic277&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_213036.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_213036.jpg&quot; alt=&quot;pic278&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_213520.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_213520.jpg&quot; alt=&quot;pic279&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_215252_edit_188441444671243.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240120_215252_edit_188441444671243.jpg&quot; alt=&quot;pic280&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_111429.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_111429.jpg&quot; alt=&quot;pic281&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_111449.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_111449.jpg&quot; alt=&quot;pic282&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_111452.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_111452.jpg&quot; alt=&quot;pic283&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_111455.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_111455.jpg&quot; alt=&quot;pic284&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_111745.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_111745.jpg&quot; alt=&quot;pic285&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_111749.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_111749.jpg&quot; alt=&quot;pic286&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_112356.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_112356.jpg&quot; alt=&quot;pic287&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_112427.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_112427.jpg&quot; alt=&quot;pic288&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_114400.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_114400.jpg&quot; alt=&quot;pic289&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_114953.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_114953.jpg&quot; alt=&quot;pic290&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_115015.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_115015.jpg&quot; alt=&quot;pic291&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_115844.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_115844.jpg&quot; alt=&quot;pic292&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_134248.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_134248.jpg&quot; alt=&quot;pic293&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_134320.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_134320.jpg&quot; alt=&quot;pic294&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_144238.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240121_144238.jpg&quot; alt=&quot;pic295&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240122_125926.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-28-Germany/IMG_20240122_125926.jpg&quot; alt=&quot;pic296&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

</description>
    </item>
    <item>
      <title>Hello World!</title>
      <link>https://zty2004.github.io/Hello-World/</link>
      <guid isPermaLink="true">https://zty2004.github.io/Hello-World/</guid>
      <pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate>
      <category>misc</category><description>&lt;p&gt;hello, world.&lt;/p&gt;

&lt;p&gt;goodbye 2023&lt;/p&gt;

&lt;p&gt;hello 2024&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Germany Day 01</title>
      <link>https://zty2004.github.io/Germany-Day-01/</link>
      <guid isPermaLink="true">https://zty2004.github.io/Germany-Day-01/</guid>
      <pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate>
      <category>travel</category>
      <category>germany</category><description>&lt;p&gt;经历了快一整天的飞行，终于到达了德国。&lt;/p&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20231231_224814.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20231231_224814.jpg&quot; alt=&quot;pic1&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_030743.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_030743.jpg&quot; alt=&quot;pic2&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_105606.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_105606.jpg&quot; alt=&quot;pic3&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;p&gt;&lt;strong&gt;坐在飞机上没有睡好，现在是昏昏欲睡的状态&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/BlobCat_Sleep.png&quot; alt=&quot;sleepy&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;128&quot; height=&quot;120&quot; /&gt;&lt;/p&gt;

&lt;p&gt;早上的柏林机场&lt;/p&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_095639.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_095639.jpg&quot; alt=&quot;Berlin_airport&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;p&gt;之后做地铁来酒店&lt;/p&gt;

&lt;p&gt;柏林地铁图&lt;/p&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_104611.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_104611.jpg&quot; alt=&quot;Berlin_u_map&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;p&gt;柏林地铁真的好脏，鸟屎，塑料瓶随处可见…&lt;/p&gt;

&lt;p&gt;地铁上的人也都很抽象，还有个人上来说了一段听不懂的话，应该是来要饭的。德国人真的会给钱（？？？&lt;/p&gt;

&lt;p&gt;总之地铁不如上海&lt;/p&gt;

&lt;p&gt;刚出地铁拍一张&lt;/p&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_115105.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_115105.jpg&quot; alt=&quot;pic4&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;p&gt;到酒店休息了一会在附近找了家小餐厅吃饭&lt;/p&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_153805.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_153805.jpg&quot; alt=&quot;eat&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;p&gt;吃的东西类似于批萨，但是比批萨薄（忘记拍了）。是一个年轻男子和他妈妈一起开的，老板很热情。说实话好吃是真好吃，但贵也是真的贵。2人24欧，我感觉也就半饱。&lt;/p&gt;

&lt;p&gt;之后就去学校看了看，在街上随便拍了点。&lt;/p&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_142614.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_142614.jpg&quot; alt=&quot;pic5&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_143005.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_143005.jpg&quot; alt=&quot;pic6&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot; /&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_151616.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_151616.jpg&quot; alt=&quot;pic7&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;p&gt;晚上又出去随便逛了逛，遇到了一个死鸟&lt;/p&gt;

&lt;source srcset=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_182915.webp&quot; type=&quot;image/webp&quot; /&gt;&lt;img src=&quot;https://zty2004.github.io/images/2024-1-1-Germany-Day-01/IMG_20240101_182915.jpg&quot; alt=&quot;dead_bird&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;2133&quot; /&gt;

&lt;p&gt;第一天很流水账，困了困了，明天再说吧。&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
