<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Christian Wolf on Medium]]></title>
        <description><![CDATA[Stories by Christian Wolf on Medium]]></description>
        <link>https://medium.com/@chriswolfvision?source=rss-3115e8b12059------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*_T8gcfUz5wrM5Wx7.jpg</url>
            <title>Stories by Christian Wolf on Medium</title>
            <link>https://medium.com/@chriswolfvision?source=rss-3115e8b12059------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 11 Nov 2026 04:49:29 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@chriswolfvision/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Claude decreased the value of papers and killed peer review]]></title>
            <link>https://chriswolfvision.medium.com/claude-decreased-the-value-of-papers-and-killed-peer-review-da91d5a54ace?source=rss-3115e8b12059------2</link>
            <guid isPermaLink="false">https://medium.com/p/da91d5a54ace</guid>
            <category><![CDATA[agents]]></category>
            <category><![CDATA[science]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[machine-learning]]></category>
            <dc:creator><![CDATA[Christian Wolf]]></dc:creator>
            <pubDate>Tue, 31 Mar 2026 10:37:15 GMT</pubDate>
            <atom:updated>2026-03-31T11:44:45.768Z</atom:updated>
            <content:encoded><![CDATA[<p>For years, centuries, the value of a paper was somewhat easy to determine: does the scientific community gain insights from the research? Is there some novelty either in theory or through evidence provided by experiments? While novelty always lied in the eye of the beholder (and one could argue that the evaluation of novelty became more subjective and complicated in the deep learning era) I still think that there is some intrinsic definition of novelty: is the paper worth reading? At least for somebody working on this or a related topic?</p><p>All this might have changed with the introduction of Agentic AI, which significantly decreased the effort and barrier for coding, running experiments, analysing, and writing scientific papers. More surprisingly, it has also lowered the entry barrier on the required technical and scientific skills and understanding of targeted topics. For work in deep learning and computer vison, for instance, Claude has now more than reasonable understanding of how neural network hyper parameters impact training and it baffles me how well it can analyze experiments and suggest changes to code and settings.</p><p>The reaction to the impact of AI has been divided in many areas, and largely questioned in areas like art. I think that science is still in the process of digesting the impact of Agentic AI and in this short post I definitely do not want to question AI usage. I actually think that its long term impact will be positive and disruptive.</p><p>Rather, I would like to discuss its impact on science communication and how knowledge is dissiminated. There is a now a real danger of the community being overrun by papers which Agentic AI made much cheaper to produce.</p><p>This raises the question of the intrinsic value of a scientific paper: evaluating a paper on the merits of novelty alone ignores the human cost of actually reading papers. Unless we switch to a mode where papers are written by AI agents to be read by AI agents alone, the human costs of reading papers need to be factored in. If the number of papers with sufficient “novelty” increases 20 fold but the capacity for reading papers stays constant, something needs to give, and that is most likely the threshold for sufficient novelty.</p><p>This is not necessarily surprising, for two reasons: because of necessity (we can’t read the sheer amount of papers written — we couldn’t in the past and this will worsen signficantly), but also because of opportunity cost. The value of reading a (relatively cheaply produced) paper is lower if my own effort for producing similar work has been lowered by Agentic AI, in particular if my own work and experiments will be closer to my target setting than the work of the paper I would read. In the past it was cheaper to read a paper somewhat related to my work than doing the actual work myself. This comparison might have shifted for “coding bound” research and <em>in fine </em>Agent AI will decrease the value of “coding bound” science and increase the value of “data bound” or “compute bound” science, ie. work whose total cost is not determined by implementations and writing but by data collection, data possession and by compute. It will also increase the value of experimental research not available to agents: experiments with real (!) robots, biological reactors etc.</p><p>P.S.</p><p>(No LLM has been used in writing this text and em dashes in this text have been placed by the human author)</p><p>P.P.S.</p><p>Usage of synthethised music in the 1970ies and 1980ies: the covers of the British Rock band “Queen” in 1976 (top) and in 1980 (bottom)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wrNlS3gBXqp9CQgEZrNZbA.jpeg" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=da91d5a54ace" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Creating 3D Figures for CV/ML papers with Blender]]></title>
            <link>https://chriswolfvision.medium.com/creating-3d-figures-for-cv-ml-papers-with-blender-c740c9602464?source=rss-3115e8b12059------2</link>
            <guid isPermaLink="false">https://medium.com/p/c740c9602464</guid>
            <category><![CDATA[drawing-tutorial]]></category>
            <category><![CDATA[scientific-writing]]></category>
            <dc:creator><![CDATA[Christian Wolf]]></dc:creator>
            <pubDate>Tue, 06 Jan 2026 19:07:26 GMT</pubDate>
            <atom:updated>2026-01-06T20:10:33.654Z</atom:updated>
            <content:encoded><![CDATA[<p>I have been asked how I created the 3D Figures from some of our papers like these:</p><p>From “Kinaema”, our robotics sequences model (<a href="https://arxiv.org/abs/2510.20261">https://arxiv.org/abs/2510.20261</a>, NeurIPS 2025):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*F10eNrkAaBa3CbNuNjZ4QQ.png" /></figure><p>From “What really matters in ImageGoal navigation”, to appear in 3DV 2025 (<a href="https://arxiv.org/abs/2507.01667">https://arxiv.org/abs/2507.01667</a>):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*w6aujGHLiEPmEm_W91N2OQ.png" /></figure><p>From “Zero-BEV”, published in 3DV 2024 (<a href="https://arxiv.org/abs/2402.13848">https://arxiv.org/abs/2402.13848</a>)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oYiqPgWLB4dHw0634niSEQ.png" /></figure><p>A couple of years ago I started drawing figures like these with Google Sketchup, a really easy to use software with a shallow learning curve. But first, I quickly reached its limits, and second, Google sold it and it stopped to be free. I switched to Blender, which has a reputation of being very difficult to use with a steep learning curve … But I found out that this only applies if you really need the very advanced features, and if you have a hateful relationship with tutorials. If you are ready to spend around 2h to watch a series of very short tutorial videos like<a href="https://www.youtube.com/playlist?list=PLjEaoINr3zgEPv5y--4MKpciLaoQYZB1Z"> this excellent series here</a> by “Blender Guru”’, you are quickly set up to do incredible figures.</p><h3>Some specific tipps for scientific Figures</h3><p>Most Figures in scientifc papers are simple shapes, very often just simple planes, but they are textured. It is actually not straightforward to add textures to planes, but it is very easy to just transform image files (.jpg, .gif, .png) into … planes, with the “Images as Planes” add-on. Once activated, load an image:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/958/1*mD-LnLsdUFKSZf_3NV31wQ.png" /></figure><p>In the file open dialog, be sure that the “Emit” property is set to a reasonable value so that the created object emits some light and is nicely visible:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*v1Y3h31pVrtIcYXzq6edHQ.png" /></figure><p>Don’t forget to switch to viewport shading so that textures are correctly displayed:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_r0NIxEWcIxnjl46M3GDNA.png" /></figure><p>You should then see something like this, where in the properties editor on the right of the window you can edit size, rotation, position etc. Alternatively, to freely move it around with the mouse, select the object, hit “g” and drag it around.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*k1HLSOfFNCwiR64oLjRjjA.png" /></figure><p>To make a simple video sequence like Figure, I just duplicate the frame with a right click “Duplicate objects”, hit the enter key immediately (don’t move the mouse) to keep it its current position, then edit the y-axis coordinate in the properties panel to shift it 0.3m, rinse and repeat:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BwCjU4jyx1ct359g6vwCUQ.png" /></figure><p>I then set my active camera to the current view:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_0Yxmng1rKfKBb_-Sn0E-g.png" /></figure><p>Rendering this with F12 (you need to play around to get the optimal view), is underwhelming: the background is not white, and we don’t have “edges”, ie. no black frames around the images, which are really useful in the kind of diagrams we want to see in papers:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3HOBlcclDRdyj9tC5X1ffQ.png" /></figure><p>Edges are easy: in the camera panel (camera icon), check pane/box “Freestyle” and you can optionally modify line thickness.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/582/1*wXPeTZtAZEHK7jBlmvPuHw.png" /></figure><p>In order to get a transparent background, do the following. In the “Editor Type” Panel, pane “Film”, be sure to check “Transparent”:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/546/1*yRUA4gyGxtGTskgs7Ah-7g.png" /></figure><p>After rendering, when you save your image, be sure to save it in PNG format (JPGs do not handle transparency) and switch the color format to “RGBA”, where “A” stands for “alpha channel”, which encodes transparency:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/520/1*EYB5gMaV3h4Nmt03DqNzGQ.png" /></figure><p>And voilà:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_f54A_1KTf5fH_afWp1J3A.png" /></figure><p>A different viewpoint:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WPhMMRR3JE_XYcah9pwQFA.png" /></figure><p>I then normally load this into Powerpoint and add the 2D parts of the Figure, like arrows and boxes:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/846/1*LyOZUciC0Qca4XR00xNSyg.png" /></figure><p>Files for this tutorial: <a href="https://chriswolfvision.github.io/www/downloads/3dfig_tutorial.blend">[Blender file]</a> <a href="https://chriswolfvision.github.io/www/downloads/3d_tutorial.pptx">[Powerpoint file]</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c740c9602464" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Links between literature on addressing transformer complexity and work on recurrent neural works]]></title>
            <link>https://chriswolfvision.medium.com/links-between-literature-on-addressing-transformer-complexity-and-work-on-recurrent-neural-works-31961e0d13af?source=rss-3115e8b12059------2</link>
            <guid isPermaLink="false">https://medium.com/p/31961e0d13af</guid>
            <category><![CDATA[deep-learning]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[transformers]]></category>
            <dc:creator><![CDATA[Christian Wolf]]></dc:creator>
            <pubDate>Sun, 21 Mar 2021 19:12:45 GMT</pubDate>
            <atom:updated>2021-03-22T08:33:44.257Z</atom:updated>
            <content:encoded><![CDATA[<p>This post addresses some similarities in the ways the Deep Learning field addressed two seemingly different problems, namely<br>A) recent work on neural networks with self-attentation (“transformers”) which addresses one of their biggest shortcomings, the quadratic computational complexity with respect to the set of input items, and<br>B) work decoupling capacity and memory size in recurrent neural networks.</p><p>The content of this post in a nutshell:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Jqw8KNXuLDAMK2SW7KboDA.png" /></figure><h4>Capacity and representation size in recurrent neural networks</h4><p>In their most classical version, recurrent neural networks keep a recurrent memory h, which is updated at each time instant given an observation x and two parameter matrices U and W:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/870/1*x9vJkJAqbNhbSIw4z8frDA.png" /></figure><p>More modern variants like LSTMs or GRUs differ in that additional gates and non-linearities are added, but they do not change the essence of what will be discussed here. As can be seen in a graphical version of the equation below, RNNs tightly couple two different properties of the model, which we would like to adjust separately: the size of the hidden state h, and the capacity of the network:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Mqz9_jXGfmrPJ3vu_PgyHg.png" /><figcaption>RNN update equation. Figure reproduced from [1].</figcaption></figure><p>In particular, the size of the transition weight matrix U is a square of the dimension of the state h. For vanilla RNNs, the capacity of the model therefore can’t be decreased without decreasing state dimensions, although we sometimes would like to decouple these two properties: the dimension of the state governs the amount of information we need to propagate over time, whereas the capacity governs the complexity of the mathematical function approximating the dynamic of the system. There is no reason why these two properties should be related.</p><p>Several solutions have been proposed for this problem:</p><p>(i) low rank decompositions of the transition matrix U, or similar mathematical constraints put on its structure, for instance [2].</p><p>(ii) Remove a part of the hidden state and transfer it into an “external” representation, which is not replaced in its entirety at each iteration, but rather updated sparsely through attention, which decreases the capacity necessary for updates. This is the strategy employed by <em>Memory Networks </em>[3], <em>Neural Turing Machines</em> [4] and their variants and follow-ups.</p><p>The two solutions share similar goals but achieve them differently. The first approach (i) keeps the mathematical structure of recurrent networks and adds constraints on one of the weight matrices, which is a smaller change to the method. In contrast, (ii) fundamentally changes how the model is structured by outsourcing memory to an external component.</p><h3>Transformers and complexity</h3><p>Transformers [5] are neural networks built on query, key, value attention using dot-product similarity. Without going into details of how transformers work, the expensive part is the calculation of pairwise similarities between items of a set</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/709/1*q3xAsqUF2g0iU1tkiD089A.png" /></figure><p>or, expressed as a softmax over an attention matrix A,</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/376/1*Jp7a3jdhwIOxFLAksQMzew.png" /></figure><p>where X is the set of items, each item represented as vector, and W and V are two weight matrices, which project linearly project the input vectors into a space in which the dot-product similarity is meaningful (in the sense of the task to learn). It is easy to see that this operation is O(N²), which creates troubles in applications where the number of items is big, like images [6][7], videos [8] etc. One strategy is to sparsify interactions and allow each layer to attend to a subset of items only [8], which solves the problem externally and does not touch on the concept of transformers itself.</p><p>Two of the most popular attempts to address this problem bear some resemblance to the two different ways (i) and (ii) for decoupling capacity and memory representation in RNNs. However, instead of focusing on presentation size, here the focus is on the calculations and interactions between data items:</p><p>a) instead of performing the full attention calculations for all item pairs, involving a full attention matrix A, the matrix can be decomposed using a matrix low rank decomposition, which can lead to a more efficient computation [10, 11] and others. The underlying hypothesis is that the attention operation itself is mostly low rank and can be described by a couple of singular values. This is somewhat similar to decomposing the RNN update equation, and thus enforcing a low rank of the dynamic of a dynamic system.</p><p>b) A recent paper [12] proposes an alternative approach, somewhat similar to (ii), which externalizes the problem. Instead of allowing all possible pairwise interactions of input items, the interactions are transferred into an external (latent) representation. The “Perceiver” [12], see figure below, allows self-attention only in this low dimensional latent space where attention operations are cheaper. The high-dimensional input space only interacts with the latent representation, never with itself (no self-attention in input space).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oSaO8LrPonPIA_zZn8OTbw.jpeg" /><figcaption>The Perceiver, Figure reproduced from [12].</figcaption></figure><p>The comparison might be a stretch, but it is still interesting. As in the first problem (decoupling capacity and representation size in RNNs), the two solutions (a) and (b) share similar goals but achieve them differently. The first approach (a) keeps the mathematical structure of transformers and adds constraints on the shape of the attention matrix, which is a smaller change to the method. In contrast, (b) fundamentally changes how the model is structured by outsourcing interactions to an external component.</p><p>Twitter: <a href="https://twitter.com/chriswolfvision">@chriswolfvision</a></p><h3>References</h3><p><strong>[1] Natalia Neverova, Christian Wolf, Griffin Lacey, Lex Fridman, Deepak Chandra, Brandon Barbello and Graham W. Taylor. </strong>Learning Human Identity from Motion Patterns. IEEE Access (4):1810–1820, 2016.</p><p><strong>[2] Cijo Jose, Moustapha Cisse, Francois Fleuret<em>, </em></strong>Kronecker Recurrent Units, ICML 2018.</p><p><strong>[3] Jason Weston, Sumit Chopra, Antoine Bordes<em>, </em></strong>Memory Networks, ICLR 2015.</p><p><strong>[4] Alex Graves, Greg Wayne, Ivo Danihelka</strong>, Neural Turing Machines, arXiv:1410.5401, 2014.</p><p><strong>[5] Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin</strong>, Attention Is All You Need, NeurIPS 2017.</p><p><strong>[6] Xiaolong Wang, Ross Girshick, Abhinav Gupta, Kaiming He</strong>, Non-local Neural Networks, CVPR 2018.</p><p><strong>[7] Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, Mostafa Dehghani, Matthias Minderer, Georg Heigold, Sylvain Gelly, Jakob Uszkoreit, Neil Houlsby</strong>, An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale, ICLR 2021.</p><p><strong>[8] Brendan Duke, Abdalla Ahmed, Christian Wolf, Parham Aarabi and Graham W. Taylor</strong>, SSTVOS: Sparse Spatiotemporal Transformers for Video Object Segmentation, CVPR 2021.</p><p><strong>[9] Shuangfei Zhai, Walter Talbott, Nitish Srivastava, Chen Huang, Hanlin Goh, Joshua M. Susskind</strong>, An Attention Free Transformer, openreview 2020 (ICLR 2020 reject).</p><p><strong>[10] Yunyang Xiong, Zhanpeng Zeng, Rudrasis Chakraborty, Mingxing Tan, Glenn Fung, Yin Li, Vikas Singh,</strong> Nyströmformer: A Nyström-Based Algorithm for Approximating Self-Attention, arXiv:2102.03902, 2021.</p><p><strong>[11] Sinong Wang, Belinda Z. Li, Madian Khabsa, Han Fang, Hao Ma, Linformer:</strong> Self-Attention with Linear Complexity, arxiv:2006.04768, 2020.</p><p><strong>[12] Andrew Jaegle, Felix Gimeno, Andrew Brock, Andrew Zisserman, Oriol Vinyals, Joao Carreira</strong>, Perceiver: General Perception with Iterative Attention, arXiv:2103.03206, 2021.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=31961e0d13af" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Cow-Sharks: exploring the Shape vs. Texture biases in Deep Neural Networks]]></title>
            <link>https://chriswolfvision.medium.com/cow-sharks-exploring-the-shape-vs-texture-biases-in-deep-neural-networks-15d551910656?source=rss-3115e8b12059------2</link>
            <guid isPermaLink="false">https://medium.com/p/15d551910656</guid>
            <category><![CDATA[deep-learning]]></category>
            <category><![CDATA[computer-vision]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[bias]]></category>
            <category><![CDATA[deep-neural-networks]]></category>
            <dc:creator><![CDATA[Christian Wolf]]></dc:creator>
            <pubDate>Mon, 30 Nov 2020 10:02:29 GMT</pubDate>
            <atom:updated>2020-11-30T14:38:40.698Z</atom:updated>
            <content:encoded><![CDATA[<h3>Cow-Sharks: exploring Shape vs. Texture biases in Deep Neural Networks</h3><p>The context to this post are recent papers providing evidence that prediction performance of deep networks trained for image classification is in majority tue to texture biases, i.e. networks take decisions based on textures / small patches :</p><ul><li>Geirhos et al., <a href="https://openreview.net/forum?id=Bygh9j09KX">ImageNet-trained CNNs are biased towards texture; increasing shape bias improves accuracy and robustness</a>, ICLR 2019.</li><li>Hermann et la., <a href="https://proceedings.neurips.cc/paper/2020/file/db5f9f42a7157abe65bb145000b5871a-Paper.pdf">The Origins and Prevalence of Texture Bias in Convolutional Neural Networks</a>, NeurIPS 2020.</li><li>???, <a href="https://openreview.net/forum?id=NcFEZOi-rLa">Shape or Texture: Understanding Discriminative Features in CNNs,</a> submitted to ICLR 2021.</li><li>Brendel et al., <a href="https://openreview.net/forum?id=SkfMWhAqYQ">Approximating CNNs with Bag-of-local-Features models works surprisingly well on ImageNet</a>, ICLR 2019. (“BagNet”).</li></ul><p>I then stumbled across this nice image on Twitter, shared by <a href="https://twitter.com/SolTight">https://twitter.com/SolTight</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/0*kFRqYdDXzsntWmdd" /></figure><p>What follows, is a summary of a <a href="https://twitter.com/chriswolfvision/status/1333041228519268353?s=20">Twitter thread I started</a>.</p><p>I passed this image through a pretrained ResNet 101 with PyTorch, and at first sight the results seem to be counterintuitive? It predicts:</p><p><strong><em>Tiger shark 23%<br>Hammerhead 21% <br>Great white shark 16%<br>Gar, garfish 11% <br>Sturgeon 3%</em></strong></p><p>So … at first sight, shape &gt; [ texture + mountain context ], at least this seems to be the case for this example. Note that we do not really know what the answer should be … the species does not exist. But for ResNet-101, the shape of the object seems to be more important than color, texture, and the fact that the background is in the mountains and not under water.</p><p>A nice baseline is to pass the the same image through <a href="https://openreview.net/forum?id=SkfMWhAqYQ">BagNet</a>, which, roughly divides the image into small patches, creates a representation by patch, and then puts all these representations into a “bag”, i.e. a structure which does not handle spatial relationships between the different patches. This kind of neural network has a strong inductive bias towards texture, as shape requires spatial relationships, at least if the scale of the shape is bigger than the patches of the decomposition.</p><p>So, BagNet provides the following results:</p><p><em>Sorrel 81% <br>Ibizan hound, Ibizan Podenco 11% <br>Basenji 4% <br>Gazelle 2% <br>Ox 1%</em></p><p>This is not surprising, the prediction is now clearly biased towards textures, which is what BagNet actually sees.</p><p>But if we investigate this a bit further, and check the results of the originally used ResNet-101 model, we can find that our intuition (shape &gt; texture) might be wrong also for this example. Let’s check the results for two different cropped images:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/102/1*Gn1wEeiteQkXbuUI36-mmA.png" /></figure><p><strong>ResNet-101<em><br></em></strong><em>Hammerhead 52%<br>Great white shark 25%<br>Tiger shark 16%<br>Killer whale 6%<br>Sea lion 0.1%</em></p><p><strong>BagNet-33</strong><br>Electric ray 10%<br>Sturgeon 9%<br>Sorrel 7%<br>Tiger shark 7%<br>Stingray 5%</p><p>And:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/174/1*rBg57FZmRzHTtAJe1Vh_zg.png" /></figure><p><strong>ResNet-101</strong><br><em>Sorrel 92%<br>Ox 6%<br>Rhodesian ridgeback 0.4%<br>Ibizan hound 0.2%<br>Boxer 0.2%</em></p><p><strong>BagNet-33</strong><br><em>Sorrel 24%<br>Gyromitra 16%<br>Ox 6%<br>Hog, pig 4%<br>Flute, transverse flute 4%</em></p><p>Clearly, cropping more and more information from the image brings the prediction of the more powerful ResNet-101 closer to the texture biased BagNet. In particular, this fin on the back of the creatures seems to be a killer feature.</p><p>A sanity check of the model output on a cow :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/660/0*IFGAksSgauJkslVU" /></figure><p><strong>ResNet-101</strong><br><em>Ox 93%<br>Oxcart 3%<br>Gazelle 0.8%<br>Water buffalo, water ox 0.8%<br>Ram, tup 0.7%</em></p><p><strong>BagNet-33</strong><br><em>ox 98%<br>oxcart 0.5%<br>Arabian camel, dromedary, Camelus dromedarius 0.3%<br>water buffalo, water ox, Asiatic buffalo, Bubalus bubalis 0.1%<br>bison 0.1%</em></p><p>And finally, one more variant of the original image:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*eIyLw6C_jXobbQkQ" /></figure><p><strong>ResNet-101</strong><br><em>Hammerhead 53%<br>Great white shark 14%<br>Triceratops 8%<br>Airship 6%<br>Tiger shark 3%</em></p><p><strong>BagNet-33</strong><br><em>Albatross, mollymawk 35%<br>Goose 15%<br>Killer whale 7%<br>Drake 6%<br>Whippet 4%</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=15d551910656" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What is translation equivariance, and why do we use convolutions to get it?]]></title>
            <link>https://chriswolfvision.medium.com/what-is-translation-equivariance-and-why-do-we-use-convolutions-to-get-it-6f18139d4c59?source=rss-3115e8b12059------2</link>
            <guid isPermaLink="false">https://medium.com/p/6f18139d4c59</guid>
            <dc:creator><![CDATA[Christian Wolf]]></dc:creator>
            <pubDate>Mon, 05 Oct 2020 10:05:24 GMT</pubDate>
            <atom:updated>2020-10-05T16:02:22.233Z</atom:updated>
            <content:encoded><![CDATA[<p>Multi-layer Perceptrons (MLPs) are standard neural networks with fully connected layers, where each input unit is connected with each output unit. We rarely use these kind of layers when working with images, at least not in the early stages of processing. Why is this so? Let’s imagine the following situation, where an input image of size 400x400 pixels and 3 color channels (red, green, blue) is flattened into a vector of 480 000 input values and then fed into an MLP with a single hidden layer with 500 hidden units:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YQf3dap3b1sP5-CdIDt8YQ.png" /></figure><p>First, we see that the amount of parameters for the first trainable layer is extremely high, since each of the 480 000 input values connected to each of the 500 hidden units, requiring 480 000 parameters (not counting bias values). Current state-of-the-art computer vision models have around 20–30 million trainable parameters, but bigger models exist. More importantly, these parameters are usually distributed over a much larger number of layers, not a single layer.</p><p>Secondly, what will happen if the object of interest (here, the monkey, let us suppose we would like to recognize monkeys in images) changes its position in the image?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FFcbByzkqR_msZNQO85fDg.png" /></figure><p>The fact that the monkey moved from the left part of the image to the right part of the image means that different pixels of the image contain the monkey, which again means that different trainable parameters are responsable for firing when the monkey appears. As a consequence, the same reasoning (“fire when monkey appears”) needs to be performed, and thus learned, for different subsets of parameters corresponding to different locations. This is a tremendous waste of computation, representation, and requires the network to relearn the same reasoning, again and again, multiple times. This will also hurt generalization performance of the model.</p><p>Our real objective is to find a neural mapping from images to predictions, which is invariant to all different geometric transformations to which objects could be subject to, for instance translations, rotations and projective distortions. For humans and animals, who are articulated “objects”, this would also include quite complex deformations. Let us focus on translations only for the moment.</p><p>Translation invariance requires, that the output of a mapping / network does not change when the input is translated. This is possible to achieve approximatively, up to a certain amount, but not directly.</p><p>We will first investigate a related property, which is <strong>translation equivariance</strong>.</p><h3>What is an equivariant mapping?</h3><p>In short, an equivariant mapping is a mapping which preserves the algebric structure of a transformation. As a particular case, a translation equivariant mapping is a mapping which, when the input is translated, leads to a translated mapping, as illustrated in the following animation:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/526/1*le9_VzIejK-aezFWYCVc8Q.gif" /></figure><p>When the input image at the left (a digit taken from the <a href="http://yann.lecun.com/exdb/mnist/">MNIST dataset</a> and embedded in a larger canvas) is translated by a certain amount, the output feature map is translated by the same amount.</p><p>Formally this property is illustrated by the figure below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*L4C5_CNKZEUvQVyw8BjcXw.png" /></figure><p>Input image X1, showing digit “4” is translated to right, which gives input image X2. F1 and F2 are respectively, the feature maps calculated by a translation equivariant mapping ϕ. In this case, the feature map F2, obtained by passing X2 through ϕ is equivalent to feature map obtained by applying to feature map F1 the same translation T which also had been applied to X1 to get X2.</p><p>The animation above has been created by training a 4-layer convolutional neural network on the original MNIST dataset of digits of size 28x28 pixels. The network has the following architecture:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*u-YCnNycJmFBMyVOqOeUMQ.png" /></figure><p>Each layer has kernel size 5x5. The convolutional block is followed by a single fully connected layer, the output layer. Here is the PyTorch code of the model:</p><pre>class LeNet(torch.nn.Module):<br>    def __init__(self):<br>        super(LeNet, self).__init__()<br>        self.conv1 = torch.nn.Conv2d(1, 20, 5, 1)<br>        self.conv2 = torch.nn.Conv2d(20, 40, 5, 1)<br>        self.conv3 = torch.nn.Conv2d(40, 40, 5, 1)<br>        self.conv4 = torch.nn.Conv2d(40, 5, 5, 1)<br>        self.fc1 = torch.nn.Linear(6*6*5, 10)</pre><pre>def forward(self, x):<br>        x = F.relu(self.conv1(x)) # now 24x24        <br>        x = F.relu(self.conv2(x)) # now 20x20<br>        x = F.relu(self.conv3(x)) # now 16x16<br>        x = F.relu(self.conv4(x)) # now 12x12<br>        x = F.max_pool2d(x, 2, 2) # now 6x6        <br>        x = x.view(-1, 6*6*5)<br>        return self.fc1(x)</pre><p><strong>Training:</strong> The model was first trained with cross-entropy loss until convergence. It is not the best model for MNIST, and it achieved a validation error of ~1%. In particular, compared to more frequent models it does not perform any pooling between the convolutional layers, which we here did on purpose.</p><p>The feature map shown in the animation above has been produced by the 4th convolutional layer, just before the pooling layer. For the illustration, we performed a k-means clustering of the scalar activations on a batch of 50 images and assigned a color code to each cluster.</p><p><strong>Testing/animation:</strong> while the model was trained on images of size 28x28, to produce the animations we fed images of larger size (38x38) into the network in order to be able move digits over the input image. It is interesting to note, that this does not require a change of the convolutional part of the model, as convolutions are independent of the input size of the image. It would, however, require a change of the fully connected output layer, which was <strong>not</strong> used for the visualization above.</p><p>As we can see, a stack of convolutional layers produces an equivariant mapping. In what follows, we will try to find out why convolutions have been chosen (by Y. LeCun, and others independently) to obtain this property.</p><h3>Why do we use convolutions to get translation equivariance?</h3><p>Let’s first imagine that we do not know what convolutions are. Our only objective is to add shift-equivariance to a neural network, since we just learned about this interesting property. We thus search for a neural network layer which is shift-equivariant.</p><p>Let’s also add the additional constraint of linearity. This is of course not a real requirement, since neural network layers can very well be non-linear, as long as they are differentiable (and even non-differentiable ones have traditionally been used, but this leads to approximations). However, the class of non-linear operators is extremely large, has many different functional forms, and it is difficult to find a class which can be easily parameterized such that it can represent universal functions (equivariant ones in our case). In classical MLPs, this problem is solved by restricting individual layers to be linear, followed by pointwise non-linearities (ReLU, tanh, sigmoid etc.). The universal approximation theorem shows that this class of functions can approximate any smooth function under mild assumptions.</p><p>The following derivation is taken from the book “Digital Image Processing”, by Bernd Jähne, Springer 1997. Yes, the book is quite old (but excellent), completely unrelated to neural works and machine learning … yet very relevant as we will see.</p><p>We thus suppose the existence of a new neural network layer, given as an operator ϕ on images / feature maps f, and which has the following properties:</p><ul><li>It is linear, i.e. given scalars α and β and images f and f’,</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cm5DEjebiywbb4PVIssIjg.png" /></figure><ul><li>It is shift-equivariant, i.e. given a shift operator m,nS, which shifts images f m pixels vertically and n pixels horizontally,</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MC9KjjsAp-_WxHl8SosRIg.png" /></figure><ul><li>It has a an impulse response h, which is not really a contraint. It just means that we know the result when the operator is applied to a Dirac impulse 0,0p centered at the origin (0,0):</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bSCE9gSLBUwBfayxMmVFzg.png" /></figure><p>We can first express the image/signal f as a linear combination of Dirac impulses p at different pixel locations. In the discrete case (which images are) this is always possible without losing any precision:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EBc15-OUV4AI9AonYkE6Zw.png" /></figure><p>We use the linearity property of the operator to move it into the sums:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*D3AnxvNKbWLbhbrjlOpSnQ.png" /></figure><p>We can then replace the Dirac impulses at different positions with a single Dirac impuls at position (0,0), which is then for each pixel shifted by an amount (m,n) in y and x direction corresponding to the position of the pixel:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3vFFGdb6ZrN1oVnLmP0GVA.png" /></figure><p>We can use the required shift-equivariance property of our operator ϕ to move it over the shift operator S:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bJF5AHP5aGf5pl1p-abIFQ.png" /></figure><p>Then, ϕ(0,0 p) is nothing else then the “impulse response”, so the output of our operator when applied to a Dirac at the origin, which we defined as being “h”. This is just a change of notation:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hzecTRlHnqs-FGdoirp-gw.png" /></figure><p>We can now express the result of the shift operator by integrating its effect into the position arguments of h:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*B2Iq93yCKyOM_9JXY7Mx1w.png" /></figure><p>Last, we can perform a change of variables, namely m’=x-m and n’=y-m, and we get</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DLknn6WeKzCnZyB01VYycg.png" /></figure><p>And this is …. a <strong>convolution operator</strong> which convolves the image f with a <strong>filter kernel h</strong>, which is equivalent to the <strong>impulse response</strong> of our operator.</p><p>This means, that the only linear and shift-equivariant operators are convolutions, and this is the reason we put convolutions into neural networks.</p><h3>How about translation invariance?</h3><p>While convolutions are translation equivariant and not invariant, an approximative translation invariance can be achieved in neural networks by combining convolutions with spatial pooling operators.</p><h3>More information</h3><p>If you are interested in more information, you can check out my <a href="https://perso.liris.cnrs.fr/christian.wolf/teaching/deeplearning/cm-deeplearning-2-7-convolutions.pdf">lecture on convolutions,</a> which is part of my lecture on <a href="https://perso.liris.cnrs.fr/christian.wolf/teaching/">Deep Learning and Differentiable Programming</a> at INSA-Lyon, France.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6f18139d4c59" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Before and after Deep Learning]]></title>
            <link>https://chriswolfvision.medium.com/before-and-after-deep-learning-20c270a58a2d?source=rss-3115e8b12059------2</link>
            <guid isPermaLink="false">https://medium.com/p/20c270a58a2d</guid>
            <category><![CDATA[deep-learning]]></category>
            <dc:creator><![CDATA[Christian Wolf]]></dc:creator>
            <pubDate>Sat, 06 Oct 2018 10:49:55 GMT</pubDate>
            <atom:updated>2018-10-06T10:49:55.473Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*si1frnlf6MHZt968PiDWYQ.jpeg" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=20c270a58a2d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Generalization and random labels]]></title>
            <link>https://chriswolfvision.medium.com/generalization-and-random-labels-c66a11058a0b?source=rss-3115e8b12059------2</link>
            <guid isPermaLink="false">https://medium.com/p/c66a11058a0b</guid>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[deep-learning]]></category>
            <dc:creator><![CDATA[Christian Wolf]]></dc:creator>
            <pubDate>Sat, 06 Oct 2018 10:47:17 GMT</pubDate>
            <atom:updated>2018-10-06T10:47:17.017Z</atom:updated>
            <content:encoded><![CDATA[<p>Caveat: I wrote this story initially on Dec. 21st, 2016, but moved it to medium in Oct. 2018.</p><p>Why is the result in the ICLR 2017 best paper “Understanding deep learning requires rethinking generalization” so interesting? (<a href="https://arxiv.org/abs/1611.03530">https://arxiv.org/abs/1611.03530</a>)</p><p>Let’s think about model fitting and generalization using an example from Christopher Bishop’s 2006 book, namely fitting a polynomial to data sampled from a sine function (supposed to be unknown) :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/676/0*VI9dBLCHaloH1RJU" /></figure><p>We most frequently determine our model complexity (the “hypothesis class” / network architecture) using cross-validation on a hold-out set. Let’s suppose we have a hold-out set on the data above, not shown here. It would most likely lead to choosing a model / hypothesis class with hyper-parameter M=3, since it closely corresponds to the (unknown) function used to generate the (noisy) data :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/524/0*lKeu5Le2qUX8m4SY" /></figure><p>We can expect this model to generalize reasonably well to a test set, since it already generalized well from the training to the hold-out set (ignoring here the fact that optimizing a model on a hold-out set can itself lead to overfitting).</p><p>Now, can we expect the same model / hypothesis class (polynomial with order M=3) to perform well on the same training data, where labels are replaced with random labels? In our case of fitting a polynomial to said data, this would involve pairs of (x,y), where the y-axis is random, e.g. this data :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/502/0*otlz3pucYs9j3sFv" /></figure><p>The model will most probably not fit this semi-random data. The model M=3 leads to low overfitting on the original (not random) data since it is capable of expressing regularities in the data which arise from the marginal and the full data distribution, e.g. including labels. Replacing labels with random labels, removes regularities from the data. As a consequence, the model is not powerful enough to fit the data.</p><p>However, the authors in [<a href="https://arxiv.org/abs/1611.03530">https://arxiv.org/abs/1611.03530</a>] showed that this is not the case for a large part of the deep models currently used in vision. Known models like VGG etc. can fit very large amounts of training data (like Imagenet) with random labels, although the same models, with the same capacity (the same number of parameters) have shown to generalize well from the training set to a hold-out set.</p><p>These results have been shown without regularization (no weight decay, not batch normalization, no dropout).</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c66a11058a0b" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>