 Great. Let's talk a little about all the other things that we can do with convolutions. So what we did so far is 2D convolution. What we have is we have a 2D image of feature tensor and we go over it as a function of space. Now the kernel moves in two dimensions in that case but of course there's cases for example videos where we deal with three-dimensional data. In that case we want as output to have a 3D matrix for example about how things move in space. We will need 3D input. Keep in mind a video is x by y by time and the kernel is then three-dimensional. The kernel goes through that entire 3D stack and the output therefore will be three-dimensional. I also want to mention other applications where convolutions are useful. For example on speech recognition. A lot of people when we talk about speech recognition immediately think we call neural networks and indeed they're great at less DMs for example but in a lot of cases we can be very good using conv nets on speech. For example 10 layers with 3 by 5 convolutions and 3 by 1 pooling. For example in the timid class and classifying phonemes. I want to mention here the possibility of graph convolutions. There's some beautiful introductions and the application would go beyond what we can do in this class but what's the basic idea? A convolution for matrices is just a local combination of entries in a matrix but let's say we have a graph for example people connected with their friends. We can say a local combination is I take the people that are my friends and I propagate something from them to me and in that sense we can do the same thing that we do with local features of matrices with local features of graphs. Local is just the adjacent nuance and so forth and that's just the tip of the iceberg. There's all kinds of prompts that can be used for example when we learn about molecules, citations, social networks and things like that. They're also important in many natural language processing cases. For example in text classification there are still significant cases where conv nets are state of the art. Importantly conv nets are relatively easy to train on relatively small computers. Now another application of conv nets is in biology and because in a way I come from biology I want to talk briefly about this. Biology has lots of publicly available data. Order 10 to the 8 different protein sequences 10 to the 7 RNA transcripts 10 to the 6 human gene expression profiles and so on and so forth. So from biology we have these massive data sets that come in that are truly important and may hold the close to how we should better treat people when they have a disease. The amount of that data is very rapidly increasing. Here you see the amount of terabytes of SRA data which is an important data type in biology and you can see how quickly it grows over time. This is in terms of terabytes on the y-axis on the x-axis the year where they have that data. So you see that it's growing extremely rapidly. Now convolution often fits well. Why? Well biological processes happen in real space so if something happens locally it could have happened at a different place so it has the same property where objects like cans occur in a given position in the same way a biological phenomenon can happen at a given space and as such translational equivalences often a good choice and we want to have translation invariant recognition of the relevant phenomena. Here's for example an example of protein. What do non-coding mutations mutations outside of the genes encoding RNA do? Now mind you on RNA this is a long string that is ultimately used to make proteins but we have on our genome we have parts that are not made into RNA so what's their role? So we know that non-coding mutations can lead to conditions like polyductally or increased stressor of various diseases. There are billions of potential mutations out there. How do we know which ones are important? Well we can look according to the ideas of confnets we can believe that there's something local about them that tells us about potential to produce diseases so what's the solution here? We use very large data biological data sets as inputs. We train a confnet to predict important features that could for example be DNA hypersensitivity, TF binding, histone max and so forth they all have important biological meaning and then we can use the model to predict what would change if there was a mutation at a given place. So what's the idea? As input we take the genomic sequences and now just like we did with images we can say locally we extract features we have lots of local features we put them together and as we go through the network we basically move between convolutions and potentially things like max pooling. Okay and ultimately we can produce interpretable results. We know some aspects about the biology and then we can ask does our network filter that out and we can say we can encode say how important something is by the size of the character which you see here you see the the a's the g's and the t's which happen to be small in that case. Now I just want you to play a little bit with this. This isn't because I want you to solve DNA prams in the future but it's rather I want you to see how this idea of confnets can be important while beyond the domains that computer scientists usually use it and can really have broad applicability to just every aspect of human life. So try out Deepsea and get an idea on how it saw how it sorts of outputs it produces and discuss what kind of other applications of confnets you could envision.