Hi! I am an audio software engineer (Mostly C++, JUCE and Matlab) working remotely from Australia. Currently I work as a freelance C++/JUCE audio developer and audio hardware collaboration under strict NDA.
My industry experience involve
C++, JUCE audio programming and algorithm consulting
Data oriented backend C++ consulting
My last few roles focus on backend C++ developments in both music and finance industry.
I have over hundred personal/academic C++ based software at github . Some others work items are under NDA during my work in the music and technology sectors.
During 2022 I worked on music information retrival, audio detection, linux compatibility of Scaler2. As well as backend C++ consulting in the multimedia/soft robotic and fintech industries.
I was educated in mostly in STEM disciplines (PhD maths, 2 Postdocs in Computer Science and Engineering). At the present state, I’m working on independent audio engineering research. I’m mostly passionate about data driven audio plugins development and hardware. I’m hoping to return to Mathematics for teaching at casual basis, if I can be given a chance again.
Formerly (between 2020-2022) I was an industry postdoc researcher working @ Concordia University, School of Engineering and Computer Science. My advisors are Ursula Eicker, Jia Yu Yuan and Freddy Lecue.
At my postdoc, I developed an undirected graph concept for hydraulic-thermal network, extension of a DSL compiler for renewable energy and a CLI application for multiway sparse decision tree optimization. At my first postdoc, I worked on computer social media. I built dependence structure between labor occupation based on job counts data, using copulae. I also developed a theoretical model based on hawkes intensity point processes allows fitting information diffusion based on observed counts of events. The main tools we used were functional analysis and distribution theory. I completed my PhD in early 2018 on the topic of stochastic Navier-Stokes equations on the rotating spheres with stable Lévy noise, under supervision of Prof. Beniamin Goldys, the university of Sydney. I have been teaching in universities on various topics for roughly 10 years. Prior to my PhD, I was a researcher in quantitative finance and stochastic processes.
Two main themes of my LAST postdoc research were:
District Heating and Electricity Networks
Extend the INSEL(integrated simulation environment language) compiler functionality to sort the model of an undirected graph, that is, the order the nodes and edges represented by blocks identified by their block numbers;
Build network graph topology.
Undirected Graph Parser
Automate system of equations
Generic solver for Nonlinear Networks
Integration of network simulation solver to the Urban Modelling Platform
Theorectical and Interpretable Machine Learning
Decision trees have been a popular Machine Learning model dates back to the 90s due to its interpretability. One starts with a simple tree, keep branching out to improve its accuracy. Stopping conditions are applied to avoid overfitting. The problem of this approach is, if we chose the wrong split at the beginning, there is no way to un-do it. Historically, mathematical optimization solvers have been used to circumvent overfitting. However, in order to fully optimize the decision trees, one has to step through a search space both in theory and practice hard.(Full optimality of decison tree has been well-known as a NP-hard problem) I follow a specialized algorithm developed in GOSDT that combines dynamic programming and branch and bound to optimize a generalize objective. The objective function consists of a sparsity term that penalize the number of leaves in the tree. The resulting trees depend on the choice of loss functions. Here are a few features of the GOSDT algorithms
Analytical bounds. The collection of bounds allow us to skip over a large portion of the search space
Dynamic programming. Split dataset into subsets until higher accuracy is achieved. The solution for one duplicated instance can be used for another.
Dependency graph. The DP formulation creates a dependency graph between sets and subsets. Each set is responsible for finding optimal features to sub-divide itself into additional subsets. Each subset decides the best feature to split. Once enough subsets decided, the optimal tree will emerge as DAG of the best features.
Priority queue. For scheduling problems.
The existing GOSDT algorithm works only for binary features, which may not be ideal for training data with multiple features. During part of my fellowship, I developed a C++ implememntation that converts the binary decision tree to n-ary tree decision tree with the existing parallelism. See mgosdt for C++ implementations.
Topics of interests:
- Mathematics, algorithms, Machine Learning
- Computer graphics, Multimedia technology
- Audio hardware emulation
- Audio Plug-in development
- Audio Software development on Linux or embedded platform
- Audio detections, DSP
- Audio oriented infrastructure
I participated in C++ conference in the past. cppcon I am a C++ developer. Though by heart and training, I’m more of a Mathematician, passionate about teaching young people how to be a good person and concerning about our society fair a bit.