So today at our seminar, we are very pleased to have Bastien Rieck who's working at ETH Zurich and is working on basically a interaction between topological data analysis and machine learning and has done some very interesting work about this and so today we'll talk about topological representation learning for structured and unstructured data. So Bastien, yes, please feel free to do your presentation. Thank you very much. Thanks for the invitation. First, this is really awesome to disseminate my work or our work here a little bit in this seminar. So today we're going to talk about structured and unstructured data and how to do some representation learning for this. I already talked to the organizers, of course. I know a little bit about the audience already knows about TDA. So I'm not going to bore you with the details, but I want to start. So typically, I would start this presentation with topological objects and avatars and the sphere and whatnot, but for this audience it's a little bit different. So here I want to set the stage a little bit different with a quote from Solzhenitsyn and I find this very, very appropriate. So we are really, really living in the future in a sense. So the quote goes thus, Nertsyn, his lips tightly withdrawn, inattentive to the point of rudeness. He did not even bother to ask what exactly Reneov had written about this arid branch of mathematics in which he himself had done a little work for one of his courses. Apology belonged to the stratosphere of human thought. It might conceivably turn out to be of some use in the 24th century, but for the time being. So this is I think a great quote because it means that we are truly living in the future. So this book is maybe a few decades old and people thought that Apology might never see the light of day and it might be confined to the realm of the purely abstract for the time being, but as you can see in the seminar now and the work that has been ongoing in conferences, this is far from being true. So in a sense, we are the avant-garde because we are living in the 24th century with our topological data analysis. So I'm happy that this prediction turned out to be a little bit wrong. So without further ado, let me briefly introduce what we're going to talk about. Most of the stuff when I talk about TDA in this presentation will be based on persistent homology and even something like a viatorious rips calculation. Although in the latter cases for graphs, we will not have to construct this complex ourselves because it will be given for us. But anyway, just so everyone is on the same page, a viatorious rips construction works by calculating this complex that is comprised of simply Cs whose pairwise distance is less than or equal to an epsilon. And having a radius of 0.5 epsilon, we create a simplex for every pairwise intersection of the Euclidean balls that will arise here. And on the right hand side, we monitor the resulting persistence diagram, which contains so far only connected components. But now, as we have pairwise intersections of three and more simply Cs, we will also get some triangles and thus some cycles. Notice that most of them are still confined to the diagonal, of course, because nothing has been destroyed yet. But at some point, we will find this big cycle in the complex that has been destroyed. So this is all known to you. We also know that those persistence diagrams are very convenient descriptors. So a lot of work has been done concerning their stability properties, stability in the geometrical sense. So when you assume that you have a function on the vertices of the simplicial complex, you can bound the changes in the persistence diagram as you vary this function. The most convenient function, which in fact, we will be using in the remainder of this talk, is the bottleneck distance. It is defined by this matching here. So it's the infimum overall bijections between the diagonals, such that you look at this supremum distance matching one point in one diagram to its other point in the other diagram. So this illustrated here, if you have those two diagrams, the blue one and the red one, the blue one being a kind of perturbed version or a more noisy version of the red one, then the bottleneck distance evaluates to the distance between those two points. So in some sense, it's a very coarse distance and there are refinements. Of course, there's the Wasserstein distance with an exponent p, but most of the time, the bottleneck distance is also pretty much sufficient and we will see why on the next slide. Namely, we have this classical stability theorem and there are so many versions of this theorem now. Some are done in a different context, but let's say the original version was given by, I think, Kohensteiner and colleagues and it was about triangulable spaces. So if we have a triangulable space, which could be a manifold and we have two continuous tame functions f and g that go from this manifold to the real numbers, then the corresponding persistence diagrams satisfy this bottleneck stability, meaning that their bottleneck distance is bounded from above by the house of distance between the respective functions. I should say tame here means that the functions don't have an infinite number of critical points and so in some sense, for most of the nice functions that we want to deal with, this is satisfied. In particular, it's satisfied when you're dealing with real world data that have been discreetly sampled. So the consequence is, and this is often misunderstood and in fact, I think a recent paper of someone in the community whose name I can't grasp at the moment showed that this theorem is often misquoted because what this specifically states is that we are robust in this context to small scale perturbations in the house of sense. If those perturbations become too large, then we lose that bound. So this means that if we take one cycle here and we calculate its persistence diagram with the cycles being shown in blue and the connect components being shown in red and we have another sampling of this circle, then the theorem applies because the distances here are very well bounded and it's not a lot of perturbation happening, but if we add a few large scale perturbations into the data set, so a few outliers into the data set, then we lose the stability result. So even though this is only a fraction of points that have been added to this cycle data set here, you can see that we lose this structure of the persistence diagram. Of course, we still find the overall cycle in the data set, but you can see that this point here in the persistence diagram has lost a lot of its persistence. So in that sense, the stability theorem only tells us that we are robust to some small scale perturbations, but not some large scale perturbations. And why am I pushing this so far? Well, I'm pushing this because there are some implications for machine learning here. Namely, we need to be extremely careful when working with mini batches. So typically in deep learning, you have this mini batch notion, which means that you take the subset of your data points of your samples and you train on this, so we will see more details about this in a minute. But when we're dealing with these mini batches, m tilde of some point cloud, m, then we need to be careful about the perturbations and about the stability of this. So for example, if we take a point cloud with 100 points that are just normally distributed in some two-dimensional space and 50 subsamples of varying sizes, so we take always more points, an increasing number of points for the mini batch, then you can see that the house of distance between the point cloud and the mini batch decreases with increasing mini batch size as it should. But nevertheless, there's some variance here and it's also and it's not directly going to zero, of course, but it's progressively going down. Which means that at some point, if your mini batch size is too small, you might not benefit from very tight bounds of the aforementioned theorem because your house of distance is still rather large. So in essence, you would need a better bound. Of course, empirically speaking, you can still do the training and whatnot. That doesn't mean that your training process will not work. It just means that you have to be careful about the theoretical bounds that you can give at this point. All right, so now what do I want to do in this talk? I want to, as I call it, bridge the chasm in some sense because persistent homology, as we all know, it is inherently somehow discrete. It deals with topological properties of a space connectivity and simplicity. While deep learning is inherently continuous in some sense, meaning that you have this back propagation step, you have the gradients and everything else to make everything differentiable. So the challenge is, can we make the calculations of a persistence diagram somehow differentiable, in particular if we have some control over the input spaces? We will see that this is possible and that this works out. So I want to maybe briefly step into this, maybe not in too much detail, but I want to showcase some exciting work from Poulenard and colleagues that were among the first ones to show how this optimization could work and how to make it differentiable. There are some other works out there that also do this, but I find their phrasing and terminology and their proofs to be the most accessible to be perfectly honest. At least, that's kind of my flavor of mathematics here. So some terminology before we step into a simple example, we assume that we have a function f from a manifold to the real numbers, and so we can see persistent homology as a map from this, from this tuple to a set of creation and destruction points. So a set of persistence diagrams in a sense, even though we don't, we ignore the dimension for the time being. And now we need a map s, which maps a point in the persistence diagram to simplex pairs. So this is why it's called s because it maps to simplices. And this maps the geometrical point in the diagram to the pair of simplices giving rise to that point in the persistence diagram. We can also evaluate this for a single coordinate or a single point in the diagram. Second, we also need a filtration map or a vertex map, which we denote by v for vertices. And the idea here is that we map a simplex to one of its vertices. How that mapping looks in practice depends on the filtration. So for the sub level set filtration, for instance, we will typically map the simplex to the vertex with the largest function value. And finally, we calculate the map p, which can be seen as a point map or a vertex or the concatenation of those. So p is what you get when you apply v after s. So you first go to the simplex, then to the vertex. And this is the map that we will take a look at because this is what will drive differentiability. So let's see that in practice. And as I said, this is just for intuition purposes. So there's a lot more stuff there. And I urge all of you, if you haven't read it so far, I would urge you to read the paper that I will cite in a second. So for a simple function on the left hand side and its corresponding persistence diagram, these these mappings look as follows. We first go from one point here with the s map, we go to the respective simplices.  I noted I denoted them by by subsets to make this a little bit more accessible. Okay, so that's that's easy. This is just the persistence pairing in a sense, right? So typically, some people call this a pairing, and then they get the pairing by actually applying the function to this diagram. Right, we can now go one step further by applying the v map. So having access to the simplices here, we look at the vertices that give rise to that simplex to that simplex function value in the filtration. And that's easy to do here because it's a sub level set filtration. So for a, this is just the vertex x three. And for a b, this is the vertex x four. And thus, the p map is now the concatenation of those two maps. So v after s. And so it maps the point zero comma four in the persistence diagram to a point in the in the data set on the manifold, namely to the top of x three and x four. So far, it's a good that's just an intuition of how that works. But now the interesting thing is, there is, you can get the gradient through this calculation. Namely, Pulinar and colleagues have the following observations. If the function values are distinct, so your f function values are distinct, or it's an injective function, then p is unique. So this mapping back into the domain is unique. Moreover, if the function values are distinct, then this map is also constant in some neighborhood. And that is great news because it means that we can calculate this gradient very easily. So assuming that we have an input function f, that depends on some parameters theta, I'm using the machine learning terminology, which always uses a theta for all the parameters. We then have f of e of some creation point is f of v for some creation point is c i because it's constant and the mapping is unique. And so we can evaluate the gradient here as a partial derivative, and we don't need to care about the partial derivative at p itself because we get c back. It's a constant mapping, and we only have to care about the function itself. So to summarize this, the partial derivative is equivalent to the derivative of the function itself evaluated at the image of the map p c. So this is, this is of course great news because this means that we can actually have a trainable function that gives rise to a filtration later on in the dataset. Again, I urge you to read this. This was done in the context of topological function optimization. So where the idea was to get a function that mimics the input data as well as it can, but we have used this whole analysis for deep learning purposes later on. So with that, I want to jump into the first paper, which is the topological autoencoder's paper that appeared last year at ICML, and it's joint work with Michael Moore, Max Horn, and Carson Warquart, all from ETH Zurich. So maybe we don't need this, but let me try just for fun. I have an animation prepared. So let's see. So the motivation for all of this is as follows. If you take a special kind of dataset, in this case, it's a dataset consisting of spheres that are nested within each other, and you train a classical autoencoder or a vanilla autoencoder, as we like to call it, you get this kind of training process here. So you can see that the different spheres that are nested in the big sphere are neatly separated from each other, which is good for reconstruction purposes. But at the same time, you lose the information about the containment relationship. So you lose the information of knowing that there is a big sphere that encloses those smaller spheres. So now let's take a look at what the topological autoencoder can do. And then I'll give you all the details about how this actually works. You can see that here during the training process, those spheres are kept at a different level. And in particular, the large-scale surrounding sphere is shown in this latent space here. So let's get back to the slides. This is, of course, great because it means that you can keep track of the connectivity and the enclosing relationships in the dataset. So let me give you a brief overview of how this topological autoencoder works. On top of this branch, you can see the, let's say, standard thing that you would do when you train an autoencoder. We have an input dataset. We put it through a neural network. This neural network has a bottleneck in the middle, so meaning that it decreases the hidden dimensionality of the dataset. The layer in the middle is often also known as the latent code because it is the latent space representation that the network has learned. From this, we get a reconstruction of the input space x tilde. And then the classical thing to do is to calculate a reconstruction loss. So the idea being that how well are you able to reconstruct your dataset after passing it through this bottleneck? Why would you do this? Well, you would do this because you want to have a dimensionality reduced representation in the middle in this latent code here, which you can use for compressing the dataset or for storing it or for all kinds of other purposes. For example, also the visualization, this is often being done in particular in the field of computational biology. All right. So now the new thing about our approach is that we have the second branch here, which evaluates a topological loss. And for this, we calculate persistence diagrams on the minibatch level of the input dataset and on the minibatch level of these latent codes. And then we try to match those as closely as possible. So in essence, we have a loss term that measures to what extent the topological descriptors of the input space and the latent space are similar or not. The idea being here that we can regularize this and we can force them to be a little bit together and represent the relevant features of the input dataset. All right. So this works in theory because we have a very nice theorem that tells us about the probability of having a exceeding, a threshold in terms of the bottleneck distance. So this is where we link back to the bottleneck distance that I mentioned before. So I won't go into the details of the proof here, but the idea is that we can essentially, if we have a bound on the house of distance between the original point cloud and its minibatch sub-sample, if that bound is good, then the probability of exceeding this bound in the bottleneck distance can also be bounded. So in essence, this means that under some conditions, this sub-sampling procedure, this minibatch procedure is stable and minibatch is artypologically similar if the sub-sampling of the dataset is not too coarse. So this gives some credence to what we try to accomplish. And the gradient calculation here looks very interesting because we only operate on the level of distance matrices of the dataset. This also opens up some exciting possibilities for future research, which we haven't investigated so far to be honest. But the idea is that we get a distance matrix of the original input space and we have a persistence diagram, the right-hand side. And if we play our cards right, namely if the distances in the dataset are all pairwise different, which amounts to some kind of generosity condition or general position condition, then we can map every point in the persistence diagram to precisely one entry in this distance matrix. And now the kicker is that each entry is a distance in this matrix. So this means that it can be changed during the training or at least the latent space representation can be changed. Of course, we can't change the representation in the original space because that's that's what we started with, but we can change the distances in the latent space. So let me just illustrate this mapping here so you can see that this point for example maps to these two distances here. These distances are of course generated by two points and we can change their position to adjust those distances here. This leads now to a very nice loss term which interestingly has been termed the topological signature loss by some publications and we unfortunately didn't give it a name so that shows if you don't give it a name then other people might give it a name. I'm not sure whether I would want to call it topological signature loss, but that is what happened. So this loss term is comprised of two components. One component goes from the input space to the latent space, the other one goes from the latent space to the input space. I have to say on the outside it's not a metric so you know that the bottleneck distance is hard to calculate even though we have some approximation schemes. The Wasserstein distance is also hard to calculate even though we also have some approximation schemes, but so this does not pretend to be a proper metric. It is just a loss term that uses some, well I would say similarity properties between the diagrams and you don't want to go too much into the details here but everything boils down to looking at the persistence pairing of an input mini-batch, so pi of x or the latent mini-batch pi of z and then using this persistence pairing which tells us which indices are paired with which other indices. So it's the, it's the, it's kind of a look up table for this implicit complex that underlies this representation and we can subset the distance matrices with these pairings and so we get one component where we exchange the distance matrices in the latent space here and the input space here but we use the persistence pairing of the input mini-batch. We get the other component by looking at both distance matrices and using the persistence pairing of the latent mini-batch. So the idea being that we cannot control the mapping or the difference between the two, the two pairings but we can control to what extent the same distances are selected in both of these spaces. So this is why it's a bi-directional loss and as you can see here it only has very simple arithmetic operations so if a is differentiable and we have this property that the distances are unique then the pairing will be constant in a small neighborhood so this means that we can do a small gradient step and we can actually train. So that's, that's the magic that happens here and that's, that's what makes this approach work in the end. So how does it look though? Let's do a qualitative evaluation. First in that I'm going to show you some quantitative results. I also have to stress there's way more datasets on which we tried this but I'm only showing this one here to have a nicer narrative structure for this kind of talk because I want to give more of a broad talk rather than a deep talk in a single paper. So anyway, the spheres dataset which as I said contains some spheres that are nested in one bigger sphere it cannot be disentangled correctly by PCAU map does a good job in representing some of those spheres but it fails to to show this this enclosure relation as the same goes for TSNE. Isomap does something very strange here. The standard autoencoder with the standard geometric construction loss fails in showing this enclosing relationship but it at least shows that these spheres have some some kind of shape and the topological autoencoder does what you would expect it to do as I showed you before. So that's, that's very neat. We can zoom into this a little bit and so we can see that it also thanks to the usage of these distances it can also to some extend mitigate or leverage information about different scales in the dataset. So it is able to tell us that this bigger sphere is in fact geometrically speaking larger than the other spheres whereas you don't see this effect as pronounced here although to to the credit of the autoencoder of course there's some there's some differences in scale here but in our method you know that you can trust those differences in scale because this is how it was set up. So maybe this is maybe now let's let's talk briefly about how to evaluate this because that turned out not to be so easy so we have we tried out a lot of different evaluation measures here for dimensional reduction. Some of them are geared towards preferring one dataset one method over over the other so we we did what anyone would do probably we just developed our own measure and it's based on the distance to measure density estimator which I think some some of you know pretty well because they they developed it as far as I understand. So we use the simple distance to measure density estimator like a discrete a simple discrete variant of it which evaluates the appropriately weighted Euclidean this square Euclidean distances between all points. This is this this evaluation has the advantage that it's well defined on mini batches and on the full input dataset and then for any smoothing parameter sigma we just evaluate the callback Leibler distance or similarity I should say between those two distributions. So we measure the similarity between the two density distributions and the idea is that if your if your method if your dimensionality reduction method is good then it should yield an embedding that represents and preserves this similarity. So how does it look this of course not the only measure that we tried but look at the quantitative evaluation the best result is always underlined and bold and the second best result is just shown in bold. So we can see here that the topological autoencoder is of course the way it's it's not it's not directly set up that way I have to stress that so it's not so this callback Leibler distance is not occurring in our loss term in any form of fashion so in some sense we are not geared towards preserving this but of course the the way that persistent homology works gives us gives us the possibility to preserve those distances a little bit better. So we can see that that for those measures we are ranking very very well in particular and this is this is a very interesting point that that occurred to us when you look at the mean squared error of the data itself so of the reconstruction then you can see that we are making the reconstruction the purely geometrical reconstruction we are actually making that a little bit worse so lower values are desirable here the autoencoder of course wins that one because that is how it has been set up but we are we are making this a little bit worse this is because the the topological constrained is somewhat at odds with the purely geometrical reconstruction so to reconstruct the data set you need some kind of other information than to have a latent space that is topologically faithful so in in some sense we are pulling the autoencoder towards in a different direction all right so this concludes the part about the unstructured data sets so we can now learn stuff on point clouds we can obtain good visualizations I could go on of course here and and please feel free to ask me anything about the autoencoders later on there's a lot of interesting things that we can do afterwards that we haven't investigated so far but at least we have this first notion of of an understanding of what is going on and what what topology is capable of so now I want to want to switch gears and go to to the structured data sets and I want to in particular I want to talk about how to learn graph iterations this is joint work with Christoph Florian Mark and Roland most of which are from from Graz University and it also appeared last year and at ICML and here let me give you a brief digression although maybe this could be somehow of an audience participation question so who is already super familiar with graph neural networks and would be bored by this and just just write in the chat if you if you're not if you already feel feel confident here otherwise I have like two or three slides that explain this a little bit okay so we already okay we we have one person who who is not super familiar that already that already is enough for me then then I'm happy then I'm happy to do it I just don't want to I just don't want to bore anyone but so okay I may be wrong but I think that most people are not familiar with GNN so yes I think the slides are worth it okay that's that's perfect so then then you're in for a treat I hope we can also discuss some something something else later on when it's about expressivity I have some some additional things to say here of course let's see okay so the the whole idea of the graph neural network is that you want to learn a graph representation this is of course a little bit made complicated by by the fact that graphs can have different edges and different numbers of nodes and so on and so forth so what you do is now the community has converged to a very I would say generic setup that in that involves message passing between nodes and edges so the idea is here you first learn some node representations some hidden representations based on aggregated attributes this aggregation happens over the neighborhoods of the graph and in fact the case iteration of that neighbor of this aggregation kind of contains information that is up to k hops away in the graph then you repeat this iteration big k times and you obtain a graph level and node level representation so more specifically you have this small aggregate function here which takes the hidden representations of your vertices that you learned in a previous step and it accumulates them over the neighborhood of that vertex so this aggregation can have different forms so typically it could be a sum of some small let's say multi-layer perceptrons that have been trained on those representations but you just need access to the neighborhood of the vertices and to the previous hidden representations you start off with in the first in the first iteration you would start with the original node features or one hot encoder tables or whatever so you start there the first hidden representation is the original input data and then you start aggregating from there with this in hand you have a combined function that takes the vertex attributes of the of the current vertex and aggregates them with the with its own hidden representation in the previous step so the combined functions typically also a sum or a max pooling or something like that and then in the end you can do a so-called readout function this takes all the hidden representations of the vertices at the end of your iteration scheme and constructs a graph level representation so you build the graph level representation from the individual node level representations so this terminology follows the paper how powerful our graph neural networks and I want to zoom into this message passing character here so you can see how that works namely if this is your graph here and we take a look at v4 you can see that it has some neighbors it has v2 it has v3 it has v5 as a neighbor and those could have arbitrarily high-dimensional attributes attached to them now you aggregate those features over the neighborhood this is for example easily done using a sum so since those vectors are high-dimensional and they have the same dimensionality you can sum them and you get a new representation whether this is a good representation is a little bit of a different point but now you can repeat this process multiple times and just update the vertex representations for v4 accordingly so of course you need to account for the fact that you have already some attributes at v4 so as I said some people could make them into a bigger vector or they could or they could sum them or whatever so there's multiple versions here and then at the end you use this read out function to read out all the high-dimensional hidden representations of your graph and from this you obtain your graph level representation and so now the motivation for this project was that we want to learn a filtration so we often employ a predefined filter function or filtration function that goes from the vertices v of a graph to the real numbers for example the degree would be commonly employed or it could be heat kernel signature I've seen that being done with great success in the past we then typically extend this to the full graph of course by setting this to a maximum of the two vertices but now the question is is it possible to learn this function and to answer to learn a filtration function that is geared towards a specific task and the answer turns out to be yes and I'm just going to show you an intuitive overview here so we take our message passing scheme we then apply persistent homology to this to the to the low-dimensional node representations we obtain a persistence diagram we then use a projection function or a coordination function psi so if we apply this function n times then this means we will get a n-dimensional vector out of that and then we use a neural network to learn a to to classify based on this representation and the gradient from this loss term here to this projection function here this is already known to exist because the projection function is a simple coordinate projection function so there's nothing new here but the nice thing is that the framework of pulenar and colleagues gives us conditions under which this gradient exists here so and which under which conditions we can go back to the original graph so I'm seeing that we have a we have a question in the chat so with with respect to which filtration is the persistent homology of the graph being computed that's an excellent question so in fact we start with a very simple degree-based filtration no we start with a simple random filtration on the nodes there's a multi-perceptron that projects this down to a scalar value I have some details on the next slide about this and if we do this we get a single scalar value on this filtration and this is this is our starting filtration but it is trainable because we have parameters for giving rise to the to the filtration function at each vertex and so the idea is that we make this function trainable based on a loss term at the end of this neural network does that answer the question to some extent okay perfect okay so so the so the nice thing about this paper is that we can show that this gradient exists here as well so we can go back from this persistence diagram representation to the actual graph and train it and we do this by applying a differentiable coordinateization scheme I'm going to skip this slide here because it's really not that much important so this just a continuous projection you can use different things you can use for example the purse lay the purse lay layer would be an excellent choice here as well or the the land layer or I think it's now called pl lay for persistence landscape so there's there's multiple options here it's just just has to take a diagram and project it so we initialize the filtration by using a single graph isomorphism network upside on layer so this is not the details here are also not important it's it's a single one level message passing graph neural network with a specific hidden dimensionality followed by a two-layer multi-layer perceptron and the important thing is that this project everything in the end to a scalar value so in the end we have a very complicated way of getting a function that lives between 0 and 1 it's typically initialized using a vertex degree or the uniform weights but this representation is as I said trainable over the course of the well the training process I would say so we know that if f is injective on the graph vertices the gradient exists this is one of the takeaways here initialize it easily and we can integrate this into existing neural network architectures and the results are interesting in so far as they show that with our method with one gin and the graph filtration learning procedure we are always better than a pure persistent homology calculation on the graph itself but we are not necessarily better than other kind of pooling methods so we so the results are a little bit of a mixed back um we are better than some pooling for the imdb binary data set but we are a little bit worse in on the imdb multi-data set but in essence we are always able to be better than a predefined filtration of on on the graph using uh using persistent homology so this is this is a good this was a good takeaway for us but now let's let's briefly towards the end of the talk let me briefly show you what else we can do so the graph filtration learning is is nice it but it has one small disadvantage namely it still does not make full use of a graph neural network because we only use the graph neural network to come up with a representation in the beginning with a filtration function and then we use a regular neural network for obtaining the rest but we're not really able to make use of the power of a graph neural network and i'm personally i'm a big fan and believer in a hybrid method so methods that can incorporate both geometrical and topological information and so this is what i'm going to show you now briefly it's a this is a recent preprint of ours it's called topological graph neural networks and it's joined work with max edward michael eve and karsten uh max michael and karsten are from eth here and adward and eve are from k u leuven in belgium but there's a very nice international collaboration here and this is just a slide to illustrate a little bit the complexity of the problem but let me briefly outline what we are doing so we are really we are pitching a method that is capable of being integrated into a graph neural network and it is a it is a layer that is capable of using different filtrations of the input dataset to obtain a graph level representation that can then be used in downstream layers and arbitrary gnn architecture so in essence it it takes the graph filtration learning approach and it makes it applicable and in in well and into google into a hybrid gnn architecture so we we achieve this by taking the node attributes of a graph on the left hand side calculating hidden representations using a node map and calculating k different filtrations of these vertices so we don't restrict ourselves to a single filtration but we take a high dimensional filtration representation by just calculating multiple filtrations of the dataset notice that some of you might now think oh they're doing a multifiltration approach but that's actually not true it's only i wish it was true it's only multifiltrations in the sense that we have multiple filtration stacked on top of each other but those filtrations are not yet interacting with each other so this is something that we want to tackle in the future and if any one of you has any ideas how to do that then i'd be more than happy to to write to write thousands of papers together with you but so for now we don't have an interaction term in those filtrations in any case with those k filtrations we get k persistence diagrams and we can now use a similar strategy from the graph filtration learning paper and use this psi coordination function to obtain k predictions of those pardon me projections of those diagrams which later on we can aggregate together with the original node attributes and make them into a new output node attribute of the input graph so in essence this kind of closes the loop so we have if you discount everything that is happening between the between this arrow here and this arrow here we have kind of a black box to go from an input node attribute of the graph to an output node attribute of the same dimensionality that is the important thing because this makes the layer fit very neatly into a graph neural network because the graph neural network assumes that the dimensionality of those features doesn't change for for deeper layers and so we can stack multiple of those layers and we can integrate we can make the network topology aware with the single integration of that layer i'm seeing that there's a suggestion namely you could maybe use linear combinations of the filtrations as new channels that's a very exciting suggestion i'm i'm going to take you up on this and maybe maybe we should discuss this at some point that that would be a very very cool way to move forward here so i'm not going to to go into more details here because this is this is still pretty fresh but i want to show you what it can actually do and and why we are excited about this line of research namely we are primarily interested in the expressivity so when you have a graph neural network expressivity refers to the fact that there are certain graphs that are not isomorphic but that you cannot distinguish with the graph neural network of course this isomorphism problem is somehow contrived i would say because in reality you're not interested in knowing whether they are isomorphic but you're interested in classifying them but nevertheless you want to you want to make sure that your your graph neural network is capable of seeing a lot of differences between different types of graphs and we have two nice synthetic data set that that show that the integration of this topology layer which we call toggle for topological graph layer is is beneficial for the performance so the first data set is the cycles data set it's a data set that has two classes and one is a simple cycle of some number of vertices and the other one is a set of triangles or polygons that that mimics this this idea so this one has one cycle obviously the one class is one cycle the other class has more than one cycle but the same number of vertices so with tda of course we are almost trivially capable of distinguishing between those data sets because we just have to count the number of cycles or even even more simpler we can just count the number of connected components right because this one has one connected component this one doesn't so it's trivially classifiable using using tda but not so much using established graph neural network methods so this part demonstrates that with our method toggle we of course end up with the test accuracy of 100 percent when i say when i say our method toggle here what i mean is that we take a normal GCN that is a graph convolutional neural network and we inject one topological layer there so we replace one convolutional layer by one topological layer to make the total number of layers still work out you can see that the standard GCN takes a few layers to capture those graphs this is in line with the fact that they are quite expressive and they can count cycle lengths but they but they need sufficiently many layers to to do this counting so if your cycles are too long and you don't have a sufficient number of layers then you cannot then you cannot find them using using the GCN a standard method from graph kernels though the weisfeller-lehmann method which is often also used for graph isomorphism testing is completely incapable of distinguishing those graphs here by contrast so this also demonstrates since the WL as it's often called the WL test or method is often used to describe expressivity of graph neural networks we are strictly more expressive than they are because we have this this data set in which in which we outperform them in which we can see features that they cannot see but we also have a theoretical proof in the preprint about this about this fact so if you're if you're interested to check this out a second data set and this will bring me to the end almost is the necklaces data set this is a little bit more complicated in terms of the structure so we take we either take these two cycles here in one of the class or we merge them in in this other class and this is a little bit more complex in terms of in terms of the topology and in terms of the features that can be used so here we don't see this effect that we are the only ones capable of classifying it but you can see that there is a saturation happening for the WL algorithm so it needs a sufficiently many sufficiently large number of iterations in this case to to look at the graph and to understand it and it never quite reaches the level of performance of a GCN or of a orbit or of our method for the GCN itself it it requires a certain number of layers to approach this this performance here but it also never quite reaches it because it's not aware of of actually counting cycles correctly but with with the topological graph layer we we get this performance here so that's that's really neat that is the synthetic data sets and here it works well and we are very expressive let's show some empirical results and we're not we're not going to to discuss everything in detail but let's just say that we have a GCN4 that means four layers which is one of the best architectures out there for the GCN I should stress not for all graph neural networks but the idea was that we take comparison partners that have roughly the same number of parameters than our method making it possible to make a fair comparison because otherwise you could say that well your method the toggle method has has an order of magnitude more parameters so of course it is more expressive we want to avoid this this backlash we want to avoid this kind of criticism and so we made sure that we have roughly the same number of parameters in all those architectures we can see that if we now compare those two here so the GCN4 and the topogen N31 meaning that we have one topology based layer and three convolutional layers we are more or less on a par with proteins we are definitely not not comparing as well on the enzymes data set who knows why that is happening we are a little bit better on average on the DD data set we're a little bit better on average on the IMDB binary data set and we are a little bit worse on the reddit binary data set so again don't want to go into into too many details here I want to summarize this with a very nice image that I found on the internet so I would summarize those results at not great not terrible so clearly there is some form of signal in there but it's not it's not very consistent so to solve this to make sure that we're getting a consistent signal we did something very daring namely we removed the node features and node labels from the graphs that we were looking at we removed them from the from the molecular graphs so from DD enzymes when we looked at their visualizations we saw that they had some interesting topology in contrast to the social network data sets which have more motives in there such as a star or something like that but those actually those data sets actually have cycles and and some nice connect components and things like this and so we were thinking okay maybe maybe all this performance stuff is driven by the node features and by the node labels themselves so let's let's remove that to ensure that we have a topology based comparison we're not and we don't carry any information about the about the nodes themselves which might which might be a confounder in this case and lo and behold this turns out to be the right approach so we can see that here suddenly we are a lot better with arm with a blue and whereas the the standard GCN is not capable of performing as well and this even looks like it's statistically significant we haven't actually evaluated this because those data sets are very tiny and so getting statistically significant results is is very very complicated here for enzymes we have a little bit of a of a less clear signal but still we see that with a sufficient number of layers we are definitely on average better than the GCN and the same thing happens for proteins so in a sense our conclusion for this was that that the assumption that topology can be helpful is definitely true if you have some features that are only driven by topology so if you have a classification task that requires structural information whereas in some of the case for some of these data sets I would say the the node information is already a little bit tainted and contains confounding information that a pure look at the topology itself will not be helpful for the classification and so with this I want to conclude and want to leave you with a few takeaway messages namely it's now pretty much clear that persistent homology can be made differentiable so the integration into arbitrary neural network architectures is possible this is this is great news for us because this means that we can build very cool architectures that are capable of helping us out in different tasks moreover these topological features can improve representation learning learning tasks that that has been that has been demonstrated not only by by this research obviously but also by a lot of other groups now in other cases but one caveat here often the the main performance driver is fully unclear so it's if you if you just throw topological features onto a new problem you really need to carefully ablate you need careful ablation studies to disentangle the actual performance in the end to make it clear that the gains you're seeing are coming from exactly the component that you are that you're changing if you're changing too many components at once for example you change the filtration and you change the way persistence is calculated and you change a lot of other things and this is very very hard to decide what is actually driving the performance it's not bad from the model perspective so you can still say this is my model and I'll perform everything else so you don't need to point to individual components but for this paper we or for this preprint we wanted to point towards these these components and we wanted to make sure that the integration of top logical features can be reasonable and be useful and I'm really really happy to see something happen here namely in previous talks I always said that the the future belongs to hybrid models and now this is one of the first hybrid models that arises from from our lab there are other hybrid models obviously but this one of the first from our lab and I'm really happy that that it shows particular promise for for graph classification as provided that the features are there and that the structural features are important in those in those graphs so with this I want to thank you very much for for your attention and I also want to extend a warm thanks to my to my main co-authors that would be Christian, Christoph, Edward, Carson, Max, Michael and Roland so we have done a lot of good work in the past I'm really happy that that we had the opportunity to collaborate on this so thank you very much


600 years ago, the ancestors of the Mono Lake Paiute inhabited the Mono Basin. They were known as the Cresedica. In this harsh environment of sand and rock, their survival depended on an intimate connection to a fragile web of life. Living in the shadows of the Mono Craters, they crafted tools from the glassy volcanic rock and hunted game in this plentiful land of the Great Basin. Like the inhabitants before them, their lives were threatened by catastrophic geologic events. Of the first people, massive glaciers buried the Sierra Nevada mountains under deep rivers of ice. As the ice fields retreated, melting snows fed countless lakes and streams, that which flowed eastward filled a vast inland sea. As the ancient sea receded, the Mono Basin emerged. Deep on the basin's desert floor lies an ancient Saline Lake. A remnant of this once great sea is known as Mono. Mark Twain called Mono Lake the Dead Sea of California. But this sleeping jewel is far from dead. Heated by the sun, this briny soup spawns simple life in abundance. The lake is alive with the transparent bodies of the brine shrimp, a graceful creature that has adapted to this salty world. With no outlet to flush away its salts and minerals, Mono's salt content is three times that of the Pacific Ocean. The Saline water cannot support fish life, but provides a delicate breeding ground for the brine shrimp which multiply into trillions. Bright ribbons of brine shrimp masses streak the surface of the lake during the warm months of summer. For many people, Mono Lake is known as the Place of the Flies. In spring, the harmless alkali flies blanket its western shores. They enter the lake on its oily surface film and lay their eggs on submerged rock. The eggs develop into fly larvae which remain underwater until maturity. Both the flies and the shrimp feed on microscopic algae, the lowest level of the lake's simple food chain. Together, the brine shrimp and the alkali fly act like magnets attracting thousands of migratory birds to the aquatic feast. The most numerous of the avian visitors are the graceful shorebirds known as the Wilson's Fallero. They come from as far north as Canada and bivouac in Mono's quiet waters. Mono Lake is their major stopover in an incredible journey to Bolivia and Argentina. For many, the lake will be their only rest stop in a journey of 5,000 miles. From freshwater inlets, the piercing cry of gulls breaks the desert stillness. Here in the freshwater, they wash away the salt that has collected on their plumage and within their digestive system. About 90% of this state's California gulls journey from the Pacific shores across the High Sierra to Mono Lake, their ancestral breeding grounds. They nest and raise their young on small islands where they are protected from predators. As the lake's water level lowers, so too does the population of its migratory birds and the web of life to which they are tethered. Lake Basin's unique features, its ghostly limestone monuments, are the most interesting. Known as tufa towers, these haunting pinnacles are born underwater. They become visible as the lake level recedes. The unique variety of tufa attracts the curious and their cameras. Forest Service interpreter Larry Ford is well acquainted with the secrets of the mysterious lake. I think one of the most important contributions I can make living here at Mono Lake as I do, season after season, is that it really gives me a good opportunity to get across to the visitor exactly what this place is like when they can't be here. The tufa towers we see close to the Lake Shoreline today were formed within the last thousand years. The carbonates in the lake mix with calcium brought in by spring water, and when these chemicals combine, they form calcium carbonate, which is limestone. The thing to remember about tufa towers is that they were all formed around springs. When tufa first forms, it's a very soft precipitation of these chemicals. They form around the source of a spring, and if they're allowed to remain in place, protected by deep water, without the effect of wave action, they will grow, they will calcify, eventually become hard enough to withstand the elements outside the lake. Another special feature of Mono Lake is the sand tufa. These are tufa structures that are formed chemically in the same way as the rock tufa you see around the shoreline, but sand tufa is formed beneath the sand, beneath the lake. It's a very delicate, very fragile, very beautiful little formations. Melting snows and alpine lakes feed the few streams that nourish Mono Lake. The daily evaporation and human consumption have caused its water level to drop. In the early 1940s, the city of Los Angeles completed an aqueduct system to collect some of the fresh water before it reached Mono Lake. Combined with long periods of drought, these occurrences have caused the salinity of the lake to double over the years, seriously threatening life in the basin. As the water level lowers, extensive alkali beaches are exposed. They feed choking dust to the basin's atmosphere as angry winds whip the lake shore. Balancing human needs with those of the environment presents a critical question that will continue to be asked. How much water does the lake need to preserve its fragile ecosystem? Huddled between the snowy Sierra and volcanic uplands, the basin changes moods frequently. The lake moves and breathes as the sun passes its yearly course. The unique alchemy of wind, water, sun and salt produces a frothy foam which dances on the beaches. A rare occurrence few have observed. By the mid-1800s, the basin had attracted a handful of Europeans. They were hardy pioneers, dreamers with ambitious visions. Few succeeded. Today, what remains are time-worn monuments to their occupancy. Some build a narrow-gauge railroad connecting the basin's forests with the gold mines of Bodhi. Others cultivated the land, creating a breadbasket for those who worked the mines in this land of boom or bust. Wallace McPherson's family was among those who dreamed of making their fortune in this unforgiving place. I've been a dreamer all my life, but I haven't had a whole lot of success. My dad's dream was to start a goat ranch, combined with a hotel on the shore, a real destination resort. We went on to the islands and raised goats for milk, which was very highly regarded dietetically at that time. This was going great guns until in 1922, and we were thrown into litigation for about ten years. My dad moved to the shore, and we started mono-in down on the old road. They'd had to move it about four times because it was late in those days, instead of dropping, it was rising. The raising is at the rate of about a foot a year. In the 30s, we used to run excursions out to the island. I would land them on the Peoja on the White Island and take them on around the east side of the island to nudge it and on back to mono-in. I had a lot of fun, but I didn't make much money out of it. And a whirlwind came down the canyon and picked up the whole shooting machine through at about 150 feet, which didn't do it any good at all. So the dreams didn't materialize, but the dreams were there. From every view of the mysterious lake, one's attention is drawn to the islands that break its surface. Twice the size of San Francisco, this inland sea holds two islands captive near its center. The Black Island, known as Nedget, is a volcanic cinder cone. Its name means blue-winged goose in the language of the Cusetica. Paoja, the large, light island, is the result of an upheaval of the lake bottom. Here, hot springs allow heated vapors to escape. The legends of the Cusetica Paiutes tell of spirits with long, wavy hair dancing in the vapor wreaths, boiling from the springs. They call the spirits Paoja in remembrance of the children of the mist who reveled there on moonlit nights. The Cusetica Paiutes made the basin home for several hundred years. Their survival in this harsh environment is a story of courage and tenacity. Jesse Durant, a Monolake Paiute, recalls her life at the lake. As far back as I can remember, we've always lived in Monolake at Rush Creek. My grandparents and my relatives, they have never known living anywhere else. To me, thinking about it now, it was really a paradise because there was greenery all around, metals and trees. We children, when we were small, we would just turn loose. There was no restriction of any kind and we were just all over the place. At that time, I think that there were about 200 Indians living around the lake. During the summer, we would make a little sagebrush little house. And that's the way we would get by during the summer. But during the winter is when we moved to the east side of the lake. The winters in the basins were really hard. The brine fly or the larvae was our main food. It was almost every summer when people or most of the women went out and gathered the kusabi, the brine fly. We'd get out with our winnowing basket and scoop them up. And first we spread some kind of a material blanket or whatever we have sheets. And put that right on and let it dry until we're ready to go home. All the younger generation, I don't think they, they haven't been out gathering it anymore. And it saddens me to see the way things are. The water has a lot to do with it. It has dried up and a lot of things has disappeared. Out of all the families, there's just the three of us left. My uncle and my aunt, so that's all there are. And whenever I visit them, I like to carry on a conversation in Paiute all the time. Human judgment has often painted this strange land as silent and vacant. A place suspended in time over which only the mirage dances and the sandstorm sweeps. But this grand and haunting country has no need of humankind. Yet our dependency on its water has shaped its destiny. A destiny bound to human reason and the whim of nature. And perhaps the grand architect of this enduring yet fragile aquatic world designed it to mirror our own mortality and planetary fate. Here, we can enter an unknown realm and return with insight to the nature of our own lives. Here, where the seasons leave and return on dry winds in a land born of ice and fire.


Good morning, folks, Steve Rhodes coming to you live from the shores of sunny Delray Beach, Florida. This is your 11-aim update, and we got a bit of a mixed bag out there. The mix goes like this. The Dow, S&P, Nasdaq, and Russell, as well as the Summys are trading to the upside. You're up 38 points in the Dow, 22 in the S&P, 180 in the Nasdaq, 100. One point really for the Russell and 102 points for the Summys. You've got gold trading out of 26 bucks. Silver's down 67 cents. Recruiters have a buck eight. Natural gas off 12 cents. 30-year Treasury is down one and a half points. Trading out at $1.2421. Let's take a look at that nine-panel market update chart. We begin by taking a look at the ES mini up the left-hand side. If we get it closed today by $4609.25, you can kiss that road's momentum indicator top goodbye, and that will suggest higher price. That holds. The top remains. Spotball to the next double-oads, 50-day exponents moving average. That is a bullish indication. The NQ out here trading above the center of its bullish-structured profile. That levels at $15,681. If price closes above $15,681, odds favor a move up to $15,967. U.S. Dollar Index pulled back, tested the top of that daily profile. Old resistance now support. Could be an A to B equal CDT upside that is forming. Gold has pulled back. It's testing the bottom of its daily profile. It's testing the center of its weekly profile. Key support here, $19,4960. If price closes below that, we should see a move back, I'm sorry, 1980-80. If we see a close below 1980-80, then we'd be looking at a move to $19,4960. Silver has pulled back. It's testing the bottom of its weekly profile. That's at $2415. If that level fails, then we're likely headed back towards its lows that developed that road's momentum indicator bottom. Lightspeak Crudus had a nice move, but it's also running the sellers. Those sellers exist at the top of its new profile, $80.16 cents out there. The price can overcome that. $80.68, maybe even $84.41. Natural gas point back into its bullish structured profile level. That zone is between $255 and $260. We're trading right now at $257. And the 30-year treasury looks like it's going to go target the bottom of that profile or that support area. It's a bullish structured profile. That would be between $123.15 and $124. So overall, the key levels to be watching today, let's just switch over, take over those four equity future contracts. $4609 and the ES. And the Dow, it's going to be the $356.93 level. And inside the Russell, it's going to be $2,007. If price close above those levels, the tops that they have in place get negated. Folks, stay tuned for the Trader Zed Show.  Please have a terrific one. Thanks for joining us. We'll look forward to speaking with you again soon. Take care now.


A river state governor years from Wike has condemned the recent attacks on police formations and promised to secure the state. In a statement on Saturday, Governor Wike said the attacks were carried out by unidentified gunmen who were bent on plunging Nigeria into another needless crisis. Recall that seven police officers were killed on Friday night when gunmen attacked three police formations in two local government areas of the state and set a police patrol van ablaze.  Governor Wike assured residents to be calm, adding that the Security Council has taken measures to secure rivers. He also expresses deepest condolences to the families of the policemen and the river state police command.


I'm Jayden Anthony. I'm Dinesh Golela, and this is the two-minute Christmas Wrap Challenge. Three, two, one, go! How many of you deserve this for me? Wrong one, man! Time's up. You do the wrong one, it's just that! No, it's both. No, it's not, it's just that! It's both, you meant to do both. And we'll do both. I think Dinesh should win. Thank you! No, what? You have to explain. Do you know what I mean? Poor politics. And gamesmanship. We don't condone cheaters over here in Bournemouth.


My name is Jeremy Weidemann. I farm here in Clay County near Corning, Arkansas. I farm a little bit of corn, mostly rice and soybeans. We have 3,500 acres between me and my dad. I've been, irrigation was my first job on the farm and that's what got me interested in this most crop or drop contest. And I was in it three years ago and I think I placed second or third but they only awarded first place then.  So we're here close to the field. I did it in, I used watermark sensors and it was able to tie my irrigation just right and catch rainfall. And I watered this field three times all year, planted in June, more or less once per month. The rains did the rest. So when in the contest, I mean like I said, my first job in irrigation, it kinda, you know, you say you learn something every day and I guess 20 years of learning I finally applied everything and won the contest. So that was probably why. Oh, I think one reason they kind of got this contest going is just to push farmers to try stuff and see if sometimes you don't think you can do something or you don't wanna try something because you don't have the motivation and this contest kind of gave me the motivation to push it and you know, I've just, I've been doing some no-telling for years. I've got a couple of fields that's just been the middles plowed out for almost 20 years now. And so, you know, I've just used that knowledge and what I've learned all that to do it. And I put it all together on this year.


This video is going to talk about solving inequalities by using a graph, by using paper, and by using a table. This first example, what we're going to remember is that when we multiply or divide by a negative number, then we have to switch the inequality. To solve this one, I'm going to subtract 10 from both sides. So negative 6b is going to be greater than or equal to 30. Now I'm okay so far. I don't have to switch the inequality until I do this next step. When I divide by negative 6, then I have to watch my inequality. And I'm going to move it right away so that I don't forget. So this is b, and that was a negative 6 that it was being divided by, so that would give me negative 5. So b has to be less than or equal to negative 5. And let's try negative 6. Negative 6 times negative 6 would be 36 plus 10 would be 46, and 46 is greater than 40, so it works. The only tricky part is that we have x's on both sides, so we want to be careful. So the tricky part about this one is that we have x's on both sides. But if we're careful, we can make sure that it's a positive x so that we don't have to worry about if we have to change the inequality or not. Now when I look at these 2x values, this is 8 and this is 2. 8 is larger and it's already positive. So it would be better to bring the 2 to the other side. So I'm going to add 2 to both sides, 2x to both sides. So now I have 10x plus 1 greater than 51. And if I subtract my 1, 10x is going to be greater than 50, and I'm dividing by a positive number, so x is going to be greater than 5. Now when you look at this one, you have negative 3x and negative 5x on both sides, but if I compare just the 3 and the 5, the 5 is larger. So it would be better to move the 5 to the other side because it will become positive and be the bigger number. So I'm going to add 5 to both sides. So 5x plus a negative 3x will give me 2x plus 5, less than or equal to negative 7, and then I'm going to subtract my 5 and 2x would be less than or equal to negative 12, and when I divide by 2, I'm again dividing by a positive so my inequality stays the same and this x is less than or equal to negative 6. Let's look at some examples that are from a table. So in this example, I'm going to kind of lead you to where it is. So where is f of x equal to g of x? Well, if you look at the table when the y values are the same, then I know that it's equal. Okay, so we would say that they're equal at x equal 5. Now it says compare f of 3. Well, at f of 3 and g of 3, we have 25 for f of 3 and 45 for g of 3. So f of 3 is less than g of 3. So there's a less than in here. Now it asked me to go on the other side of my equal sign and look at the x equal 6. So f of 6 is 49, g of 6 is 29. So now f of 6 is bigger than g of 6. So it's greater than. So what intervals of value satisfy the inequality where f of x, 8x plus 1, is greater than negative 2x plus 51, that g of x. That's going to be down here below my 5 because if I look at 7, 57 is bigger than 35. It's also greater than. So it's going to start where? Hmm. Well, it starts at 5. Remember, we're just going to put a parenthesis there because it means really close to 5 but not exactly 5. And then it's going to go like that forever. So it would be infinity. And infinities always have a parenthesis. So how about we're going to look at the graph. It's the same inequality. It's just the graph of it. So now it's asking me to compare f of negative 5 and g of negative 5. Well, negative 5 is right here. So here's g of negative 5 and here is f of negative 5. And it looks like these values up here, this is a positive y value and this would give me a positive y value. So f of negative 5 is actually going to be less than g of negative 5. Another way to look at it is we know the higher up on a graph we go, the bigger the numbers. G of x value is on top of or above the f of x value. So it's got to be bigger. Alright, now it asks us to do f of 10 and g of 10. Here's 10. Now this is g of 10 and then over here I have f of 10. See it's on the f function. And when I compare those, f of 10 now is higher or its value looks like 80. It looks like it's maybe 30. So f of 10 is going to be greater than g of 10. So again it asks us for the values that would make it true and it would be the same thing. If we think about the intersection, remember we know that at intersections of two graphs that's where they're the same. And over here on this side we have f is greater than g. And over here on this side we have f is less than g. So we want to go from here over. So it's going to be from 5 but not including 5 to infinity just like we found in the case before. So let's talk about a model using inequalities. So we have these two equations here that are, one is for the cost of printing flyers by traditional methods and one is for cost of printing flyers using digital printing. And we want to know when traditional will be cheaper than digital. In other words, when t of n is going to be less than d of n. That's where we're headed. So for a table I would need to have my equation in here and here's my two equations. And I've already actually set up the table. So we come back in here to table and you can see I'm just trying to find, narrow it down. And I'm kind of close but not real close so I'm going to jump around. I'm going to come in here to table set and I'm going to stay at a thousand but I'm going to try to go maybe every thousand. See if I can get in the right set of thousands and then I can narrow it down if I need to after that. So second graph again and I can see that they're getting closer and closer and oh look right there they're the same. So that tells me that they are the same for x equal or in this case n equal four thousand. So in our table the way we would look at it that way is we would say okay well then we have three thousand and four thousand and five thousand. Have to have a couple pieces of information in there. And then for five three thousand this is seven hundred this is t of n and d here the three thousand would be six fifty. And if I do four thousand that's whether the same it's eight fifty for both and the five thousand gives me one thousand and one thousand fifty. And again we're just putting more than one piece of data if you were to putting this on a test for me this is what you would want to do. You would want to show me a table like this and then from here interpret your answer. So when t of n is cheaper at three thousand t of n is bigger but at so we could say that it's greater here it's equal here and it's less than so when it's four thousand it's the same but anything after four thousand. So we would say that it would be four thousand up into you know infinity for the situation infinity may not make sense but more than four thousand maybe we should put it that way. More than four thousand flyers. Well now I know what the answer is so let's see if we can get that same answer by graphing in by symbols. So in a graph I'm going to set my window and now since I've looked at the table I know what my values need to be. So I went to five thousand in the max and since I was in the thousands I went every hundred and I went to a thousand because eight fifty I usually go to the nearest multiple ten. And when it's that close I would go to a thousand and again every one hundred and if I look at my graph hopefully I can see the intersection.  And we see that x is equal to four thousand and y is equal to eight fifty and we would put our two equations in here kind of like we see them. And so it's a way you would get your answer show your answer this is your work. This is a number of flyers and this is cost and then you got your order pair. And then finally for symbols we come back up here to T of n is less than D of n we can literally put that in. So I'm going to do my symbols over here give me a little bit more space. So two fifty plus one point one five n that's T of n is going to be less than D of n which was fifty plus point two zero in. So gathering my like terms I would want to subtract my point one five because it's smaller than my point two. So two fifty is less than fifty plus point zero five that's the difference in. And then I would want to subtract fifty from both sides so two hundred is less than point zero five n. And since I have my calculator here we'll just verify that two hundred divided by my point zero five will give us n is greater than four thousand. There's that number we expected and that's exactly what we said more than four thousand flyers and my inequality says n has to be greater than four thousand. So you would of course want to write a sentence here so you say that four thousand and one flyers or more must be made printed. I guess if we want to be real technical here for the T of n you don't know it by any other name to be cheaper.


Here's my fellow sniffers, my fellow sniffers, flighters and newbies. My name is Marlene McCohen. Marlene McCohen, Marlene McCohen. Welcome to my channel. I have a fairy. And if you love animals, you're going to love this channel. This is Jersey. Take a good look at her because once she realizes that she's on camera, she's going to try to leave. Yes, that is a thing. Where are you going? Come here, Jersey. My parents are on their way over. Well, not really on the way. I actually have to go pick them up. Here's the thing. I don't think my mom's been here in like nine months and usually they just show up and surprise me, but here was what my mom said. I told you guys I was coming Monday, but I thought maybe I should tell you that really I'm coming on Sunday in case you want to clean up the house. My poor parents have to be filmed once they land. Look out! Close your eyes, mom. Why? Like mom never met the cat? No, mom never met the cat. I opened my eyes. No, don't open your eyes. Are we plunking this on me or what? What? They won't scratch, will they? No, don't open your eyes. Starbucks. Let me see your little face. Starbucks, don't be like this in me now. Where is the rice?  What do they eat, bird food? Don't worry, my Persian dad.  I know it's no carb house. Seriously though, where is the rice? Here's what we're gonna do. Package. So I thought it would be funny to drop it off myself. I can't do this! Are you filming? She's right there, she's looking. Hey, Martina, are you filming this? Because I know you're always cold. You're so much. They never would have seen us coming. We did good.  Now to a YouTube star who is a parent expert who made that rescue happen. We have an emergency situation and we need to get down to business. I don't know if we can help it and I'm praying that we can. There's an African gray that fell into a sewer, okay? Three, three, three in. Oh my God, this is so sad. I know. My question is, what are you both doing?  There's that rock that they're talking about. This one? Isn't it? That's the rock. Wait, I see him, I see him. You see him? Oh my God! Keep going, keep going, keep going, keep going. Yeah, keep pushing him out. Flip it, flip it, flip it. Okay, push, push, push. Oh my God, he walked. He walked. Let's go. Guys, do you see him? Do you see him? She's coming, she's coming. He haven't again since? No. No? Okay, guys, it's 1.17 a.m. Okay, the fire department is on the way. They're here. I saw, but I just fell through the hole. We've got to get the tray in there right now. Wait, let's get the tray over there. Oh my God! Something very big is about to happen today. What is that? Has he ever bit you?  Do you want to get a deal? Tell you something. Isn't that the most gorgeous tail you've ever seen? Yeah. Who is this? Let's go ahead. Okay, so this is Isis. She's so proud of her tail. My fan was homeless, so I took this burden. Oh, I have to tell you something about Cody. Oh, that's not Cody. He won't let me pick him up. Are you chunky? You know what? I haven't said hello to Jersey. This is Jenna and Jersey and Harry and Vinny's. Set up what table? Vinny's, Vinny's really excited. We are doing our show today. Guys, this is so amazing. My own little pop-up shop. How cool is this? Do you want a free fly? She did it on herself. Hey, so do you come here often? I'm gonna use this hand instead, okay? No, not this hand. This one was better. I am one lucky bee poxer. I'll tell you that much. Is that easier? Uh-oh. Oh, shoot. I'm very surprised he's not biting you right now. Okay. I have to show you how I taught Jersey to sing. Is what I think happened. This is what happened. There's always a chance of me finding Picasso. I just want him to be happy. And someone wrote to me that like, they feel like I gave him the gift to be able to survive out there. And I know I did. So that's what I really think happened to him. And I think he looked at that bird in a cage. Finchy. And saw that maybe he could live his next 10 years out in a different way. Sometimes I look and it's just my heart breaks and I can't look anymore because I'm afraid I'm not gonna find him. Join every group you can and type in mustache parakeet. It's just never too late. People find their birds after years and maybe one day he'll be too cold or too tired or too much rain and he will go to somebody here. Maybe he'll go to the wrong person and fly away from them and then I'll find them. I don't know. Into my life I've always found an answer that I think can be confirmed. I don't believe I've officially found it yet with Picasso but I believe I will. I just hope it's good news when I do find it. Welcome to my video. Today we're gonna have an amazing. Yeah, see I get lighter and normal colored when you come into the picture because it's like focusing on my wife. And I got a big head. You don't have a big head. I do, I look cute.   What are you giving me? I need both.  Okay, I come in innocently to get food and what is he telling me? He says, do you want a baby mustache, Berkey? I'm like, stop. Only one. There's only one. I don't get baby birds. All my birds are rescues. It's so big, so I can't tell what I'm doing. And I guess my trouble with this is that like, how many birds can be meant to be for me? Like, at some point it's gotta be too much. I'm gonna need a Starbucks. I have to show you something. I don't know if I'm gonna put this part in, but oh my God guys, I did it. I don't know. I feel really emotional. So I got the bird. I put money down. I thought about not telling you guys, but then I thought maybe you wanna be on the journey with me of this bird. It's a big day. This is one of the most exciting things that I ever, ever will have to tell you. Do you guys remember when I said drop date June 9th? Well, here it is. This is the big reveal that UPS delivered. I can't get boxes open. You guys know I can't get boxes open.  The Feathered Fun Box. What is in the box? George just told me he's coming home. I don't think he has any idea that these boxes arrived. What happened? Oh, did they know already? Don't look! Little Snippers, flighters and newbies, we're on our way to our meet and greet. That's all I have to say, cause I'm so nervous. I'm excited too. Oh, you're already wearing an item in the box. This is a big day for us. And I want you guys to know that literally when you see what's about to happen here and if you've been watching my videos through and through you will literally know that dreams do come true. First of all, I want to give a thank you to the store. I mean, thank you so much for helping us out. Three, two, one, go. So we had the ribbon. That's cool. And I was like, is the store opening? I was minding my own business about to make a video when I got a phone call. Cause I love meeting people everywhere and talking to them and apparently getting their phone number. And he goes, this is very weird, but I am right here with an Egyptian gray. I'm like, oh really? An Egyptian gray? What's an Egyptian gray? He goes, uh, uh, an African gray. I'm like, I thought so. Oh, baby. And he's really timid. He's going to try spreading him. It's going to be okay. Shall I use something? Yeah. I want to show you something. What is it? Is it bad? Is it bad? Oh, we got a new bird? No, we don't have a new bird. Who mess with you? I wonder if you took him out. What do you mean took him out? Yeah, you know, like he won. He was not a gangster, George. Yeah, he is. Oh, your head is okay now. Before he was like, I just cracked my neck doing that. No, I think usually you try to go right back to your by the neck. I figured out what happened with this bird. What? Keep saying murder. Like, witness or murder. And then the owner was like, you're going to like turn the ends. I got a cute, cute, cute, cute, cute. Guys, Felipe might have new information. If he tells me that this bird says, let's go raiders. We think he said, let's go raiders. Let's go, right? Oh, let's go raiders. Oh, let's go raiders. Let's go. Or is that how it goes? Then this is the bird. I know. Felipe? Yeah. What does the bird say? I have you on. Go raiders. Who told you that? Yeah, the bird says, go raiders. That's the one? Yep, it's the one. All right, she's going to be so happy. You have the sweetest African gray. We are about to possibly do a proposal, but he wants to do it when the light is sort of out. So we'll see if we make it in time. Either we find another great spot and he just feels it or he doesn't, we do it tomorrow. If he feels it, it feels it. If he feels it, then he feels it. What do you think it is? What is it? What do you think it is? It did. What? Thank you guys so much. You guys are such a source of encouragement for me and it's just like the most amazing thing. I really want to thank you and I want you to know you as one person have so much value. I love you guys so much. Bye.